随着时间的推移,我们的Android项目已经扩展了很多,现在我们正在从同一个源代码树创建多个品牌的APK。由于Android的软件包命名要求,这已成为一项挑战。
我们在Android库项目中拥有所有共享代码,该项目包含在主应用程序项目中。此外,我们还为每个品牌的品牌资源提供了Android库“叠加”功能。当我们想要建立一个品牌时,我们会为该品牌添加一些额外的属性,最终在主要的共享代码Android库之前包含“覆盖”Android库。举例说明:
AppProject
Include: BrandALibrary or BrandBLibrary
Include: SharedLibrary
SharedLibrary
-> src/..
-> res/..
BrandALibrary
-> res/..
BrandBLibrary
-> res/..
'BrandALibrary或BrandBLibrary'在构建时切换,方法是在构建时使用命令行开关包含.properties文件。没有什么太花哨的了。构建脚本还必须在构建时更改.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: No resource identifier found for attribute 'state_list' in package 'com.myapp'
[aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector.xml:4: error: No resource identifier found for attribute 'state_add' in package 'com.myapp'
[aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector.xml:4: error: No resource
identifier found for attribute 'state_list' in package 'com.myapp'
[aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector.xml:5: error: No resource
identifier found for attribute 'state_add' in package 'com.myapp'
[aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector_button_selector.xml:5: error: No resource identifier found for attribute 'state_list' in package 'com.myapp'
BUILD FAILED
C:\android-sdk\tools\ant\build.xml:539: The following error occurred while executing this line:
C:\android-sdk\tools\ant\build.xml:568: null returned: 1
我的自定义属性并不引人注目,我有一个state_add,并且state_list定义了我可以用来为控件设置默认状态,该控件显示一个带有图标的按钮,指示应显示哪些状态。在某种程度上它就像一个“切换”按钮,我可能最终会用切换按钮替换这个控件。
我创建此按钮时跟随this tutorial。
我的问题是,最后(这个家伙啰嗦不是他?),是否有办法确保aapt将'重新映射'自定义属性中使用的包名称。如果我甚至想在我们的库中编写更多自定义控件,我们需要appt才能执行以下操作:
在Ant构建期间,我是否遗漏了自定义属性的映射方式?我可以做些简单的事情来修复构建问题吗?
答案 0 :(得分:19)
例如:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto" >
...