"android:useEmbeddedDex" 在 Android Q 上的目的

Purpose of "android:useEmbeddedDex" on Android Q

从这里 (https://developer.android.com/preview/features#embedded-dex),您可以看到 Android 引入了一项新功能,允许使用嵌入式 dex 直接从 APK 中 运行 代码。

我很好奇这有什么用?

指南说:

This option can help prevent an attack if an attacker ever managed to 
tamper with the locally compiled code on the device."

我的理解是,当您安装 APK 时,它会被编译并作为优化的 dex 文件存储在 dalvik 缓存中。 dalvik 缓存只能由系统用户访问,因此除非 phone 是 root,否则攻击者无法访问它。

如果 phone 是 root(并且攻击者是 运行ning 作为 root),那么嵌入式 dex 文件仍然可以被篡改,因为攻击者可以修改 apk 并重新-用他们自己的密钥签名。

谢谢!

正确。通过启用此选项,您将强制系统使用 JIT 编译器(就像在 Android 4.4 之前在 dalvik 上一样)而不是 AOT (5+) 直接从 .apk 文件中 运行 dex 代码或两者的结合 (4.4-5)。您不能在不重新签名的情况下修改和 运行 apk 中的 dex 代码,并且由于您没有原始签名密钥,因此您必须使用不同的密钥对其进行签名。作为应用程序开发人员,您可以实施代码检查 apk 签名和校验和,从而不允许 运行ning 已被篡改的 apk。另一方面,你在 dalvik 缓存中拥有的是优化版本的 .dex 文件和预编译的 .oat 文件,它们没有签名,因此你可以修改它们。