我有一個用於交叉編譯我們的代碼的cmake腳本。爲了編譯Android,我們使用Ant爲本地部分運行cmake。 Ant處理Android/java部分。由於我們在java端有像import android.support.v4.app.ActivityCompat;
這樣的進口,我拿着支持庫jar在/my/sdk/folder/extras/android/m2repository/com/android/support/support-v4/24.0.0/support-v4-24.0.0-sources.jar
,並將其卡在我的libs
文件夾中。我非常肯定這在以前適用於較舊的SDK版本,但現在不起作用。 (這似乎是罐子的文件名已經改變,不知道它是否以任何方式。)Ant構建不包括Android支持庫jar
問題是,即使我有我的libs
文件夾中的罐子,我仍然得到構建代碼時出現如error: package android.support.v4.content does not exist
的錯誤。難道不應該像將支持庫jar放到libs
文件夾中一樣簡單,我們走嗎?在包含支持庫之前,一切都編譯好。
我可能在這裏做錯了什麼?我還可以嘗試其他什麼?
有什麼我想:
- 解壓的jar看到了Android的文件在那裏。他們是,而且一切似乎都是按順序的。
- 從jar中取出解壓縮的文件,並將其添加到我的
src
文件夾中,除了我自己的文件外,我們還有src/com/android/support/v4/...
。大部分支持庫已編譯,但還有其他錯誤。這實際上並不重要,因爲包含一個jar應該很簡單。 - 強迫螞蟻通過使用
<path>
和<fileset>
直接包括罐子,請參閱下面的build.xml
的嘗試。 - 其他各種小東西。
的build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="myApp" default="debug" xmlns:if="ant:if" xmlns:unless="ant:unless">
<property environment="env" />
<path id="sdk.dir_path">
<pathelement path="${env.ANDROID_SDK}" />
</path>
<path id="ndk.dir_path">
<pathelement path="${env.ANDROID_NDK}" />
</path>
<pathconvert targetos="unix" property="sdk.dir" refid="sdk.dir_path"/>
<pathconvert targetos="unix" property="ndk.dir" refid="ndk.dir_path"/>
<property file="ant.properties" />
<loadproperties srcFile="local.properties" />
<loadproperties srcFile="project.properties" />
<!-- Attempting to force inclusion of jar. Does not help. -->
<property name="project.lib.dir" value="${basedir}/libs"/>
<path id="lib.path">
<fileset dir="${project.lib.dir}" includes="support-v4-24.0.0-sources.jar" />
</path>
<fail
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project'."
unless="sdk.dir"
/>
<target name="clean" depends="android_rules.clean">
<delete dir="obj"/>
<delete dir="libs/x86"/>
<delete dir="libs/armeabi-v7a"/>
<delete dir="build_x86"/>
<delete dir="build_armeabi-v7a"/>
</target>
<!-- Not relevant -->
<target name="build-jni">
<!-- Snip -->
</target>
<target name="-pre-build" depends="build-jni">
</target>
<!-- Include Android build.xml -->
<import file="${sdk.dir}/tools/ant/build.xml"/>
</project>
文件夾結構
.
├── AndroidManifest.xml
├── ant.properties
├── build_cmake.xml
├── build.xml
├── jni
│ ├── Android.mk
│ └── Application.mk
├── libs
│ └── support-v4-24.0.0-sources.jar
├── local.properties
├── project.properties
├── README.txt
├── res
│ └── values
│ └── strings.xml
└── src
└── com
└── mycompany
└── myApp
└── myApp.java
8 directories, 12 files
是不是真的有什麼特別之處其他文件 - 它們只包含正常的東西。無論如何,我會在這裏張貼他們,以免我錯過了一些愚蠢的東西。
的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mycompany.myApp"
android:versionCode="1"
android:versionName="1.0.0" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application
android:label="@string/app_name"
android:debuggable="true">
<activity
android:name="com.mycompany.myApp.myApp"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
project.properties
target=android-15
local.properties
Empty file
ant.properties
// An attempt to force Ant to include libs folder
jar.libs.dir=libs
JNI/Android系統。MK
// Not really used, cmake sets target platform.
APP_ABI := all
JNI/Application.mk
// Not really used, cmake sets target platform.
APP_ABI := x86
strings.xml
是不相關的,我們需要從myApp.java
知道的唯一事情是,它上面的語句包括使用支持庫。 build_cmake.xml
只是另一個從build.xml
調用的腳本來運行cmake
。
好的,所以我留下來的「唯一」選項是解壓縮jar,並在我的構建中包含支持庫文件? –
@Krøllebølle:理想情況下,你離開Ant。谷歌已經將開發人員從兩年前的開發版本中剔除。當然歡迎您嘗試解壓縮AAR,並採取各種措施,並將它們集成到您的Ant構建中。俗話說,「你的里程可能會有所不同」。或者,回到'19.1.0',這是作爲JAR正式發佈的最後一個版本。 – CommonsWare