如何为每个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
相关产品推荐
相关产品推荐

