代码拉取完成,页面将自动刷新
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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。