Ant构建不包括Android支持库jar

时间:2016-08-23 14:16:41

标签: java android ant jar

我有一个用于交叉编译代码的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文件夹中然后关闭吗?在包含支持库之前,所有编译都很好。

我在这里可能做错了什么?我可以尝试/检查其他什么?

我尝试了什么:

  1. 解压缩jar以查看Android文件是否存在。他们是,而且一切似乎都井然有序。
  2. 从jar中取出解压缩的文件并将其添加到我的src文件夹中,这样除了我自己的文件外,我们还有src/com/android/support/v4/...。大多数支持库已编译,但还有其他错误。这是非常重要的,因为包含jar应该很简单。
  3. 使用<path> <fileset>强制Ant直接包含jar,请参阅下面的build.xml中的尝试。
  4. 各种其他小事。
  5. 的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脚本。

1 个答案:

答案 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开始。