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

如何为每个Android包生成仅含所需资源的R.java文件

解决每个Android包生成专属精简R.java的方法

你当前的问题根源是把所有库的资源混放在同一个./res目录,aapt执行时会扫描整个目录的所有资源,导致每个包生成的R.java都包含全部资源ID。要生成仅对应包所需的R.java,核心是拆分资源目录并调整aapt命令:

  • 拆分资源目录
    为每个包创建独立的资源目录,只存放对应包实际用到的资源:

    • ./res_compat:对应android.support.compat的专属资源
    • ./res_coreui:对应android.support.coreui的专属资源
      避免不同包的资源混杂,确保目录资源与包一一对应。
  • 调整aapt命令参数
    针对每个包,指定其专属的资源目录,替换原来的共用./res:
    处理android.support.compat的命令:

    "aapt.exe" package -v -f -m 
      -M "\libraries\android.support.compat\AndroidManifest.xml"
      -I "C:\SDKs\android\platforms\android-32\android.jar" 
      -S "./res_compat"
      -J "./tmp/src" 
      --auto-add-overlay 
      --output-text-symbols ./tmp/
    

    处理android.support.coreui的命令:

    "aapt.exe" package -v -f -m 
      -M "\libraries\android.support.coreui\AndroidManifest.xml"
      -I "C:\SDKs\android\platforms\android-32\android.jar" 
      -S "./res_coreui"
      -J "./tmp/src" 
      --auto-add-overlay 
      --output-text-symbols ./tmp/
    
  • 处理共享资源(若有)
    如果多个包存在共用资源,可单独创建./res_shared目录,在aapt命令中用多个-S参数同时指定专属目录和共享目录:

    "aapt.exe" package -v -f -m 
      -M "\libraries\android.support.compat\AndroidManifest.xml"
      -I "C:\SDKs\android\platforms\android-32\android.jar" 
      -S "./res_compat"
      -S "./res_shared"
      -J "./tmp/src" 
      --auto-add-overlay 
      --output-text-symbols ./tmp/
    

    这样aapt会优先加载专属资源,再合并共享资源,生成的R.java仅包含该包用到的资源ID。

  • 验证结果
    执行命令后,检查./tmp/src下对应包的R.java,应该只包含该包资源目录中的资源ID,不同包的R.java内容会根据自身资源差异有所不同,体积也会显著缩小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:45:48