0

当我使用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]}

但我找不到任何关于它们是如何生成的参考。安装在 2 个不同设备上的同一个应用程序不匹配单个哈希值。我认为我最初的问题是:我可以使用必须与 dumpsys 日志中显示的哈希匹配的 apk 生成校验和/哈希吗?似乎它们与 apkmd5sumsha1sumapk 不匹配。

4

1 回答 1

2

所有哈希都是用 生成的Integer.toHexString(System.identityHashCode(object))。但是您尝试匹配其哈希值的对象包含多个字段(例如各种时间戳),这些字段不受 apk 内容单独控制。因此,您无法创建在安装时会产生所需哈希值的 apk。

于 2016-11-11T14:23:18.827 回答