1 Star 0 Fork 0

奈蜇579 / tools

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
apk.go 2.33 KB
一键复制 编辑 原始数据 按行查看 历史
奈蜇579 提交于 2024-05-07 15:22 . v0.1.8
package tools
import (
"bytes"
"encoding/base64"
"errors"
"fmt"
"github.com/avast/apkverifier"
"github.com/shogo82148/androidbinary"
"github.com/shogo82148/androidbinary/apk"
"image"
"image/png"
"os"
)
type ApkInfo struct {
Label string
PackageName string
VersionName string
VersionCode int32
SignatureSha1 string
IconPath string
IconMD5 string
}
func ParserApk(apkPath string) (*ApkInfo, error) {
//先验证签名
signatureSha1, err := getApkSignatureSha1(apkPath)
if err != nil {
return nil, err
}
//打开Apk
app, err := apk.OpenFile(apkPath)
if err != nil {
return nil, err
}
//延后释放
defer func(app *apk.Apk) {
_ = app.Close()
}(app)
icon, _ := app.Icon(&androidbinary.ResTableConfig{SDKVersion: 25, Density: 720})
label, _ := app.Label(&androidbinary.ResTableConfig{Language: [2]uint8{uint8('z'), uint8('h')}})
packageName := app.PackageName()
versionName, _ := app.Manifest().VersionName.String()
versionCode, _ := app.Manifest().VersionCode.Int32()
//生成icon png
iconPath, _ := makePng(label, icon)
iconMD5, _ := imageToBase64(icon)
return &ApkInfo{
Label: label,
PackageName: packageName,
VersionName: versionName,
VersionCode: versionCode,
SignatureSha1: signatureSha1,
IconPath: iconPath,
IconMD5: iconMD5,
}, nil
}
func getApkSignatureSha1(apkPath string) (string, error) {
res, err := apkverifier.Verify(apkPath, nil)
if err != nil {
return "", err
}
certInfo, _ := apkverifier.PickBestApkCert(res.SignerCerts)
if certInfo == nil {
return "", errors.New("no certificate found")
}
return certInfo.Sha1, nil
}
func makePng(label string, img image.Image) (string, error) {
if img == nil {
return "", errors.New("nil image")
}
dir, err := CreateDirIfNotExist("./temp/icon/")
if err != nil {
return "", err
}
pngPath := fmt.Sprintf("%s%s.png", dir, label)
pngFile, err := os.Create(pngPath)
if err != nil {
return "", err
}
defer func(pngFile *os.File) {
_ = pngFile.Close()
}(pngFile)
err = png.Encode(pngFile, img)
if err != nil {
return "", err
}
return pngFile.Name(), nil
}
func imageToBase64(img image.Image) (string, error) {
buffer := new(bytes.Buffer)
err := png.Encode(buffer, img)
if err != nil {
return "", err
}
base64Str := base64.StdEncoding.EncodeToString(buffer.Bytes())
return base64Str, nil
}
Go
1
https://gitee.com/naizhe579/tools.git
git@gitee.com:naizhe579/tools.git
naizhe579
tools
tools
v0.1.8

搜索帮助