我有一个用于交叉编译代码的cmake脚本。要为Android编译,我们使用Ant为本机部分运行cmake。 Ant处理Android / java部分。由于我们在java端有import android.support.v4.app.ActivityCompat;
之类的导入,因此我将/my/sdk/folder/extras/android/m2repository/com/android/support/support-v4/24.0.0/support-v4-24.0.0-sources.jar
上的支持库jar放在我的libs
文件夹中。我很确定这之前适用于较旧的SDK版本,但现在它不起作用。 (似乎jar的文件名已经改变,不知道它是否有任何影响。)
问题在于,即使我的libs
文件夹中有jar,但在构建代码时仍会遇到大量错误,例如error: package android.support.v4.content does not exist
。不应该将支持库jar放在libs
文件夹中然后关闭吗?在包含支持库之前,所有编译都很好。
我在这里可能做错了什么?我可以尝试/检查其他什么?
我尝试了什么:
src
文件夹中,这样除了我自己的文件外,我们还有src/com/android/support/v4/...
。大多数支持库已编译,但还有其他错误。这是非常重要的,因为包含jar应该很简单。<path>
<fileset>
强制Ant直接包含jar,请参阅下面的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
,它有上面的include语句来使用支持库。 build_cmake.xml
只是从build.xml
调用以运行cmake
的另一个ant脚本。
答案 0 :(得分:2)
我把支持库jar放在/my/sdk/folder/extras/android/m2repository/com/android/support/support-v4/24.0.0/support-v4-24.0.0-sources.jar并卡住了它在我的libs文件夹中
除非你以某种方式攻击构建过程以从JAR文件中编译Java源代码,否则这将无效。
不应该像在libs文件夹中删除支持库jar一样容易吗?
没有&#34;支持库jar&#34;。 support-v4
已作为AAR分发,用于AAR感知构建工具(Gradle,Maven),自大约两年前20.0.0
开始。