小编Nea*_*che的帖子

如何在构建期间解决Android库自定义属性和包名重新映射?

随着时间的推移,我们的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文件同时......虽然他们可以).

在我们的共享代码库项目中添加一个类之后,一直运行良好,直到我们的构建完成.我四处寻找下面这个网页的原因,我偶然发现了以下网页,该网站遇到了同样的问题并修复了他的版本以使其工作:

http://devmaze.wordpress.com/2011/05/22/the-case-of-android-libraries-and-custom-xml-attributes-part-2/

在构建期间,日志中会显示以下错误:

    -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)

android custom-attributes android-build aapt

7
推荐指数
1
解决办法
7401
查看次数

标签 统计

aapt ×1

android ×1

android-build ×1

custom-attributes ×1