在Project.properties中使用$ {sdk.dir}构建Android Ant

Sim*_*ant 5 ant android

我想${sdk.dir}在project.properties文件中使用该变量,因此我可以将其检入版本控制并在不同的设置机器上使用相同的文件.

我的工作设置如下:

我的project.properties:

target=android-18
android.library.reference.1=..\\..\\..\\sdk\\extras\\android\\support\\v7\\appcompat
android.library.reference.2=..\\..\\..\\sdk\\extras\\google\\google_play_services\\libproject\\google-play-services_lib
Run Code Online (Sandbox Code Playgroud)

我的local.properties:

sdk.dir=C:\\adt-bundle-windows-x86_64-20130917\\sdk
Run Code Online (Sandbox Code Playgroud)

此设置使用命令行中的ant编译.但当我替换我时..\\..\\..\\,${sdk.dir}我得到错误:

project.properties我希望它如何使用:

target=android-18
android.library.reference.1=${sdk.dir}\\extras\\android\\support\\v7\\appcompat
android.library.reference.2=${sdk.dir}\\extras\\google\\google_play_services\\libproject\\google-play-services_lib
Run Code Online (Sandbox Code Playgroud)

结果是:

BUILD FAILED
C:\adt-bundle-windows-x86_64-20130917\sdk\tools\ant\build.xml:460:
Failed to resolve library path:
C:\adt-bundle-windows-x86_64-20130917\sdk\extras\android\support\v7\appcompat
Run Code Online (Sandbox Code Playgroud)

所以变量${sdk.dir}被正确替换但不知怎的,它无法解决.有任何想法吗?

更新编辑

在同一个文件(project.properties)中使用变量进行proGuard设置正常工作:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
Run Code Online (Sandbox Code Playgroud)

kie*_*ill 2

这本身并不能解决您的问题,但我希望它能对您有所帮助。

我的问题是我需要在我的项目中引用 Google Play Services SDK 作为库。然而,我们的应用程序是使用 Ant 在单独的盒子上自动构建的。

我发现库项目不能使用绝对路径引用;它们必须与您的项目相关,如下所述

库项目存放位置

相对于依赖的应用程序项目,对于存储库项目的位置没有特定要求,只要应用程序项目可以通过相对链接引用库项目即可。重要的是主项目可以通过相对链接引用库项目。

我使用该ant.properties文件来设置android.library.reference.1=../../../../Program Files/Android/android-sdk/Android/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib库。此引用仅适用于构建服务器,并且此路径相对于构建服务器上的库位置。

对于开发,我使用 Eclipse。因此,库的相对路径是使用project.properties文件引用的,并且是相对于我的开发盒的。这意味着每当我在服务器(使用 Ant)上触发构建时,ant.properties都会使用 中的引用而不是project.properties文件。

ant.properties文件级别较低,因此将覆盖project.properties/local.properties文件中写入的任何内容。

正如您所看到的,我确信这不是您正在寻找的答案,但这是 Ant 的限制。我最后的建议是放弃 Ant 并使用Gradle