随着时间的推移,我们的Android项目已经扩展了很多,现在我们正在从同一个源代码树创建多个品牌的APK.由于Android的软件包命名要求,这已经变得具有挑战性.
我们在Android库项目中拥有所有共享代码,该项目包含在主应用程序项目中.此外,我们还为每个品牌的品牌资源提供了Android库"叠加"功能.当我们想要建立一个品牌时,我们会为该品牌添加一些额外的属性,最终在主要的共享代码Android库之前包含"覆盖"Android库.为了显示:
AppProject
Include: BrandALibrary or BrandBLibrary
Include: SharedLibrary
SharedLibrary
-> src/..
-> res/..
BrandALibrary
-> res/..
BrandBLibrary
-> res/..
Run Code Online (Sandbox Code Playgroud)
通过在构建时使用命令行开关包含.properties文件,可以在构建时切换"BrandALibrary或BrandBLibrary".没有什么太花哨的了.构建脚本还必须在构建时更改.APK的包名称,以便两个.APK文件可以同时在给定设备上共存(主要用于QA目的,因为我们不希望客户同时使用这两个.APK文件同时......虽然他们可以).
在我们的共享代码库项目中添加一个类之后,一直运行良好,直到我们的构建完成.我四处寻找下面这个网页的原因,我偶然发现了以下网页,该网站遇到了同样的问题并修复了他的版本以使其工作:
在构建期间,日志中会显示以下错误:
-pre-build:
-code-gen:
[echo] ----------
[echo] Handling aidl files...
[aidl] No aidl files to compile.
[echo] ----------
[echo] Handling RenderScript files...
[renderscript] No renderscript files to compile.
[echo] ----------
[echo] Handling Resources...
[aapt] Found Deleted Target File
[aapt] Generating resource IDs...
[aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\layout\fancy_layout.xml:22: error: No resource identifier found for attribute 'state_add' in package 'com.myapp'
[aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\layout\fancy_layout.xml:22: error: …Run Code Online (Sandbox Code Playgroud)