【问题标题】:Titanium Mobile: Cannot build android modules in 3.3.0Titanium Mobile:无法在 3.3.0 中构建 android 模块
【发布时间】: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


    【解决方案1】:

    您使用 3.3.0 很好,因为从这个版本开始,Android 模块的创建相对容易。通过查看您的 build.properties,我认为缺少某些内容,或者您​​忘记在此处完全添加它应该接近于:

    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 命令行工具)

    然后在终端中运行以下命令:

    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。

    您可以通过将其导入 Eclipse 来直接处理它。完成后可以在目录上使用ant 构建它。

    希望对您有所帮助。检查module creation guide

    【讨论】:

    • 感谢您的回复。我没有发布我的整个 build.properties。将很快发布 cli create 的输出。我确实安装了所有必需的软件。这是新 AppCompat 要求的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多