【发布时间】:2014-09-29 23:31:51
【问题描述】:
更新:澄清一下,我可以成功构建流程。问题是关于直接在设备上安装示例项目(尽管我认为模拟器也不起作用)。
大约两年前,我开发了一个模块,可以在 Android 上实现蓝牙连接。我相信当时 Titanium SDK 的最新版本是 2.0 左右。我相信模块的细节和示例应用程序与这个问题无关。我会先问我的问题,然后尝试解释我为引导我找到实际问题所经历的步骤。
我的问题是:我的环境中是否存在错误配置,或者这是 Titanium SDK 中的错误?
如果是后者,我很惊讶我找不到任何关于它的信息,因为它会阻止 android 模块在最新的 SDK 中使用 ant 安装。
关于我的构建环境的信息:
- Mac OS 10.9.5
- Titanium Studio 3.3.0.GA
- Ti CLI 3.3.0
- Android 19
-
java -version:java版本“1.6.0_65” - Java(TM) SE 运行时环境(内部版本 1.6.0_65-b14-462-11M4609)
- Java HotSpot(TM) 64 位服务器 VM(内部版本 20.65-b04-462,混合模式)
我正在尝试为撰写本文时的最新 SDK 3.3.0 构建它。我发现当我尝试用 ant 构建(安装)时,结果如下:
[exec] [ERROR] /var/folders/x7/h7lgzf1n4nx7fcwr26fdrzxr0000gn/T/mTUYC62ti/testmodule/build/android/res/values-v14/themes_base.xml:133: error: Error: No resource found that matches the given name: attr 'android:actionBarWidgetTheme'.
[exec] [ERROR] /var/folders/x7/h7lgzf1n4nx7fcwr26fdrzxr0000gn/T/mTUYC62ti/testmodule/build/android/res/values-v14/themes_base.xml:148: error: Error retrieving parent for item: No resource found that matches the given name 'android:Theme.Holo.Light.DialogWhenLarge'.
[exec] [ERROR] /var/folders/x7/h7lgzf1n4nx7fcwr26fdrzxr0000gn/T/mTUYC62ti/testmodule/build/android/res/values-v14/themes_base.xml:159: error: Error: No resource found that matches the given name: attr 'android:actionBarWidgetTheme'.
[exec] [ERROR] Error generating R.java from manifest
[exec] [ERROR] Build Failed.
BUILD SUCCESSFUL
Total time: 20 seconds
不仅如此,在创建一个全新的移动模块项目并直接使用 ant 构建时:
cd proj/android && ant install
错误是一样的。我还应该指出,我不久前重新格式化了,所以我发现我不太可能已经破坏了我的钛装置。现在,从这里开始,我进入了 Titanium 构建脚本,试图弄清楚发生了什么。首先,来自 Titanium SDK 3.3.0 发行说明:
Due to the addition of the appcompat library, there are a number of behavior changes to the application:
...
The target SDK must be set to API level 14 (Android 4.0.x) or higher, or you must have API level 14 or higher installed.
现在在我的项目的构建输出中:
[exec] [TRACE] Writing out AndroidManifest.xml
[exec] [DEBUG] /path/to/my/androidsdk/build-tools/17.0.0/aapt package -m -J /var/folders/x7/h7lgzf1n4nx7fcwr26fdrzxr0000gn/T/mTUYC62ti/testmodule/build/android/gen -M /var/folders/x7/h7lgzf1n4nx7fcwr26fdrzxr0000gn/T/mTUYC62ti/testmodule/build/android/AndroidManifest.xml -S /var/folders/x7/h7lgzf1n4nx7fcwr26fdrzxr0000gn/T/mTUYC62ti/testmodule/build/android/res -I /path/to/my/androidsdk/platforms/android-10/android.jar
请注意,它使用的是 android-10 而不是 android-14+ 的工具,考虑到我的 timodule.xml 和 build.properties 的相关位,这很奇怪: timodule.xml:
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
<tool-api-level>19</tool-api-level><!-- deprecated - see below -->
build.properties:
titanium.platform=/Users/trey/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.GA/android
android.platform=/Users/trey/sdk/android-sdk-macosx/platforms/android-19
google.apis=/Users/trey/sdk/android-sdk-macosx/add-ons/addon-google_apis-google-19
android.ndk=/Users/trey/sdk/android-ndk-r9d
事实证明,重要的似乎只是弃用的元素,而在 timodule.xml 中根本不重要。构建脚本位于$titanium_sdk/$os/$version/android/
观察:在 builder.py 中设置 MIN_API_LEVEL = 19(或 14)而不是 10 可以解决问题。所以构建脚本忽略了我的配置并使用默认值。这似乎发生在构建器类的 init 方法中:
temp_tiapp = TiAppXML(self.project_tiappxml)
if temp_tiapp and temp_tiapp.android:
if 'tool-api-level' in temp_tiapp.android:
self.tool_api_level = int(temp_tiapp.android['tool-api-level'])
tool_api_level_explicit = True
这会设置构建脚本使用的 tool_api_level,但在我的情况下,它永远不会被调用,因为没有 tiapp.xml。所以我做了一个tiapp.xml,并把它放在我的示例项目中。它与 timodule.xml 具有相同的配置。作为构建过程的一部分,它将与示例项目的其余部分一起复制到一个临时文件夹中,该文件夹将用于构建和运行项目。上面代码中的self.project_tiappxml 是项目的根目录。而且那里仍然没有 tiapp.xml,因为它与其他所有内容都被复制到了 Resources 目录,所以 tool_api_level 总是设置为默认值 10。这基本上是我所得到的。
所以,我的问题又来了:是我的配置错误,还是这是一个错误。在我看来,如果它是一个错误,那么没有人能够构建 android 模块,我能说得最好。所以如果是我的错,我做了什么导致它,我该如何解决它。
更新:如果您看到我上次的编辑,那是错误的,很抱歉 - 我为 ti 选择的 SDK 是 3.2.3!修复了这个问题,它可以很好地创建新项目。它也建立。但是,安装示例项目仍然会导致与上述相同的错误:
[exec] [ERROR] Error generating R.java from manifest
[exec] [ERROR] Build Failed.
我还在对 aapt 的调用上方添加了一行,以阐明这些错误是在尝试为示例项目编写 AndroidManifest.xml 时发生的。
【问题讨论】:
标签: android ant titanium titanium-mobile titanium-modules