文章

Android-安全性-直接从 APK 运行嵌入式 DEX 代码

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

注意:启用此功能可能会影响应用的性能,因为 ART 必须在应用启动时使用 JIT 编译器(而不是读取提前编译好的原生代码)。我们建议您先测试应用性能,然后再决定是否在已发布的应用中启用此功能。

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

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

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

    注意:如果您使用的 AGP 版本低于 4.2,请勿设置 useLegacyPackaging 选项。

    Kotlin

    1
    2
    3
    4
    5
    
        packagingOptions {
          dex {
            useLegacyPackaging = false
          }
        }
    

    Groovy

    1
    2
    3
    4
    5
    
        packagingOptions {
          dex {
            useLegacyPackaging false
          }
        }
    

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

android_binary( … nocompress_extensions = [“.dex”], )

本文由作者按照 CC BY 4.0 进行授权