直接从 APK 运行嵌入式 DEX 代码

在搭载 Android 10(API 级别 29)和更高版本的设备上,您现在可以告知平台直接从应用的 APK 文件运行嵌入式 DEX 代码。如果攻击者曾设法篡改了设备上本地编译的代码,此选项有助于防止这类攻击。

如果您使用的是 Gradle 构建系统,若要启用此功能,请执行以下操作:

  • 在应用清单文件的 <application> 元素中将 android::useEmbeddedDex 属性设置为 true

  • 在模块级 build.gradle.kts 文件(如果您使用的是 Groovy,则为 build.gradle 文件)中将 useLegacyPackaging 设置为 false

    Kotlin

      packagingOptions {
        dex {
          useLegacyPackaging = false
        }
      }
      

    Groovy

      packagingOptions {
        dex {
          useLegacyPackaging false
        }
      }
      

如果您使用的是 Bazel 构建系统,若要启用此功能,请在应用清单文件的 <application> 元素中将 android:useEmbeddedDex 属性设置为 true,并让 DEX 文件保持未压缩状态:

android_binary(
   ...
   nocompress_extensions = [".dex"],
)