Titanium Mobile:无法在3.3.0中构建android模块

时间:2014-09-29 23:31:51

标签: android ant titanium titanium-mobile titanium-modules

更新:为了澄清,我可以成功构建流程。问题是关于直接在设备上安装示例项目(虽然我认为模拟器也不会起作用)。

我大约两年前开发了一个模块,允许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.这基本上就我已经得到了。

所以,我的问题:我的配置错了,或者这是一个错误。在我看来,如果它是一个bug,那么没有人能够构建android模块,我能说的最好。所以,如果这是我的错,我做了什么导致它,我该如何解决它。

更新:如果您看到我上次编辑,那是错误的,我很抱歉 - 我选择的SDK for ti是3.2.3!修正了它并且它创建了新项目。它也建立。但是,安装示例项目仍会导致与上面相同的错误:

[exec] [ERROR] Error generating R.java from manifest
[exec] [ERROR] Build Failed.

我还在调用aapt之上添加了一行,以澄清在尝试为示例项目编写AndroidManifest.xml时发生这些错误。

1 个答案:

答案 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

但我建议的是经常错过以下内容:

  1. 你应该在路径中安装android-ndk
  2. 你的系统必须安装gperf(适用于Mac附带的xcode命令行工具)
  3. 然后在终端中运行以下命令:

    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