You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于AOSP构建:Android.mk能否设置minifyEnabled=true及替代方案?

在AOSP的Android.mk中实现代码混淆与资源缩减的方案

首先明确一点:Android.mk本身并不支持直接设置minifyEnabled=true或shrinkResources=true——这两个是Android Gradle Plugin(AGP)专属的配置项,而AOSP基于Make的构建系统有自己的一套混淆与资源优化逻辑。不过我们完全可以通过AOSP提供的原生配置来实现等价效果,下面分两部分说明:

一、代码混淆(对应minifyEnabled=true)

AOSP支持使用ProGuard或R8进行代码混淆与优化,你需要在Android.mk中通过以下配置来开启:

  1. 开启混淆功能
    使用LOCAL_PROGUARD_ENABLED指定混淆模式,常用值包括:

    • full:同时开启混淆、优化与代码压缩
    • obfuscation:仅开启混淆
    • optimization:仅开启代码优化
  2. 指定混淆规则文件
    通过LOCAL_PROGUARD_FLAG_FILES指向你的自定义混淆规则文件(比如proguard-rules.pro),也可以添加系统默认的Android混淆规则。

示例配置:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := YourTargetModule
LOCAL_SRC_FILES := $(call all-java-files-under, src)

# 开启完整的混淆与优化
LOCAL_PROGUARD_ENABLED := full
# 指定自定义混淆规则
LOCAL_PROGUARD_FLAG_FILES := proguard-rules.pro
# 引入AOSP自带的Android基础混淆规则(类似AGP的proguard-android.txt)
LOCAL_PROGUARD_FLAGS += -include $(SRC_DIR)/frameworks/base/tools/proguard/proguard-android.txt

# 如果需要使用R8替代ProGuard(部分AOSP版本默认支持)
LOCAL_USE_R8 := true

include $(BUILD_PACKAGE)

二、资源缩减(对应shrinkResources=true)

AOSP的资源缩减依赖代码混淆生成的资源使用记录(usage.txt),需要和代码混淆配合使用,配置方式如下:

  1. 启用资源缩减器
    在Android.mk中添加LOCAL_RESOURCE_SHRINKER := true,这会让构建工具自动移除未被代码引用的资源。

  2. 配合混淆生成使用记录
    必须确保代码混淆已开启(即LOCAL_PROGUARD_ENABLED不为空),这样资源缩减器才能拿到混淆阶段生成的资源使用信息,精准判断哪些资源可以被移除。

示例配置(在上述混淆配置基础上添加):

# 启用资源缩减功能
LOCAL_RESOURCE_SHRINKER := true

注意事项

  • 和AGP的shrinkResources一样,如果你的代码通过反射引用资源,需要在res/raw/keep.xml中手动指定要保留的资源,避免被误删。
  • 资源缩减仅对BUILD_PACKAGE类型的模块生效,如果你构建的是库模块(BUILD_STATIC_JAVA_LIBRARY或BUILD_SHARED_JAVA_LIBRARY),该配置不会生效。

总结

虽然Android.mk没有直接对应AGP的minifyEnabled和shrinkResources配置,但通过LOCAL_PROGUARD_ENABLED+LOCAL_PROGUARD_FLAG_FILES实现代码混淆,配合LOCAL_RESOURCE_SHRINKER实现资源缩减,完全可以达到和原Gradle配置相同的资源缩减效果。

内容的提问来源于stack exchange,提问作者Midhun PM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:20:07