Android 'adb shell dumpsys package' 哈希指的是什么?
To what do the Android 'adb shell dumpsys package' hashes refer to?
当我使用像
这样的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 生成 checksum/hash 吗?似乎它们与 apk 的 md5sum
或 sha1sum
不匹配。
所有哈希都是用 Integer.toHexString(System.identityHashCode(object))
生成的。但是您尝试匹配其哈希值的对象包含多个字段(例如各种时间戳),这些字段不受 apk 内容单独控制。所以你不能创建一个在安装时会产生所需散列值的 apk。
当我使用像
这样的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 生成 checksum/hash 吗?似乎它们与 apk 的 md5sum
或 sha1sum
不匹配。
所有哈希都是用 Integer.toHexString(System.identityHashCode(object))
生成的。但是您尝试匹配其哈希值的对象包含多个字段(例如各种时间戳),这些字段不受 apk 内容单独控制。所以你不能创建一个在安装时会产生所需散列值的 apk。