2016-11-11 39 views
0

当我使用dumpsys调试工具,如Android的'adb shell dumpsys包'哈希引用了什么?

adb shell dumpsys package com.example.testapp.first 

我得到的结果为单包像这样(的Nexus 6P,7.1.1):

Packages: 
    Package [com.example.testapp.first] (2036fd1): 
    userId=10225 
    pkg=Package{42e7a36 com.example.testapp.first} 
    codePath=/data/app/com.example.testapp.first-1 
    resourcePath=/data/app/com.example.testapp.first-1 
    legacyNativeLibraryDir=/data/app/com.example.testapp.first-1/lib 
    primaryCpuAbi=null 
    secondaryCpuAbi=null 
    versionCode=1 minSdk=21 targetSdk=24 
    versionName=1.0 
    splits=[base] 
    apkSigningVersion=1 
    applicationInfo=ApplicationInfo{29cb2a4 com.example.testapp.first} 
    flags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ] 
    privateFlags=[ RESIZEABLE_ACTIVITIES ] 
    dataDir=/data/user/0/com.example.testapp.first 
    supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity] 
    timeStamp=2016-11-03 01:12:08 
    firstInstallTime=2016-11-03 01:12:09 
    lastUpdateTime=2016-11-03 01:12:09 
    signatures=PackageSignatures{9fe380d [53ea108d]} 
    installPermissionsFixed=true installStatus=1 
    pkgFlags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ] 
    User 0: ceDataInode=474317 installed=true hidden=false suspended=false stopped=true notLaunched=true enabled=0 
     runtime permissions: 

在此日志中,你可以找到几个散列(或至少散列的第一个x十六进制),如:

Package [com.example.testapp.first] (2036fd1): 
pkg=Package{42e7a36 com.example.testapp.first} 
applicationInfo=ApplicationInfo{29cb2a4 com.example.testapp.first} 
signatures=PackageSignatures{9fe380d [53ea108d]} 

但我无法找到任何参考关于如何生成它们。安装在两个不同设备上的相同应用不匹配单个散列。我想我的原始问题是:我可以生成一个apk的校验和/哈希值,它必须与dumpsys日志中显示的哈希相匹配吗?看起来它们不匹配apk的md5sumsha1sum

回答

1

Integer.toHexString(System.identityHashCode(object))一起生成所有哈希。但是你试图匹配哈希的对象包含多个不受apk内容控制的字段(例如各种时间戳)。所以你不能创建一个安装时会产生所需散列值的apk。