更新:为了澄清,我可以成功构建流程。问题是关于直接在设备上安装示例项目(虽然我认为模拟器也不会起作用)。
我大约两年前开发了一个模块,允许Android上的蓝牙连接。我相信当时最新版本的Titanium SDK大概是2.0。我相信模块和示例应用程序的细节与此问题无关。我先问我的问题,然后尝试解释我所经历的步骤,以便引导我找到实际的问题。
我的问题是:环境中的某些内容是否配置错误,或者这是Titanium SDK中的错误?
如果是后者,我很惊讶我无法找到有关它的任何信息,因为它会阻止android模块在最新的SDK中安装ant。
有关构建环境的信息:
java -version
:java版本" 1.6.0_65" 我正在尝试在撰写本文时为最新的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.这基本上就我已经得到了。
所以,我的问题:我的配置错了,或者这是一个错误。在我看来,如果它是一个bug,那么没有人能够构建android模块,我能说的最好。所以,如果这是我的错,我做了什么导致它,我该如何解决它。
更新:如果您看到我上次编辑,那是错误的,我很抱歉 - 我选择的SDK for ti是3.2.3!修正了它并且它创建了新项目。它也建立。但是,安装示例项目仍会导致与上面相同的错误:
[exec] [ERROR] Error generating R.java from manifest
[exec] [ERROR] Build Failed.
我还在调用aapt之上添加了一行,以澄清在尝试为示例项目编写AndroidManifest.xml时发生这些错误。
答案 0 :(得分:0)
很好你正在使用3.3.0,因为从这个版本开始,Android模块创建相对容易。通过查看你的build.properties,我觉得缺少了一些东西,或者你忘了在这里完全添加它应该是接近的东西:< / p>
titanium.platform=/Users/xxxxxx/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.GA/android
android.platform=/Users/xxxxxx/Documents/adt-bundle-mac/sdk/platforms/android-16
google.apis=/Users/xxxxxx/Documents/adt-bundle-mac/sdk/add-ons/addon-google_apis-google-16
android.ndk=/Users/xxxxxx/Documents/android-ndk
但我建议的是经常错过以下内容:
然后在终端中运行以下命令:
ti create -p android -t module -d <WORKSPACE_DIR> -n <MODULE_NAME> -u <MODULE_URL> --id <MODULE_ID>
## Sample Command
ti create -p android -t module -d ~/Documents/Sample_Workspace/ -n calc -u http:// --id org.appcelerator.calc
如果一切正常,您的Sample_Workspace
文件夹中会有一个名为calc
的模块和给定的ID。
你可以通过将它导入你的日食直接处理它。完成后,可以使用ant
在目录上构建它。
希望它有所帮助。查看module creation guide。