2016-08-23 93 views
0

我有一個用於交叉編譯我們的代碼的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文件夾中一樣簡單,我們走嗎?在包含支持庫之前,一切都編譯好。

我可能在這裏做錯了什麼?我還可以嘗試其他什麼?

有什麼我想:

  1. 解壓的jar看到了Android的文件在那裏。他們是,而且一切似乎都是按順序的。
  2. 從jar中取出解壓縮的文件,並將其添加到我的src文件夾中,除了我自己的文件外,我們還有src/com/android/support/v4/...。大部分支持庫已編譯,但還有其他錯誤。這實際上並不重要,因爲包含一個jar應該很簡單。
  3. 強迫螞蟻通過使用<path><fileset>直接包括罐子,請參閱下面的build.xml的嘗試。
  4. 其他各種小東西。

的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

回答

1

我把支持庫罐子在/my/sdk/folder/extras/android/m2repository/com/android/support/support-v4/24.0.0/support-v4-24.0.0-sources。 jar並將其卡在我的libs文件夾中

除非您以某種方式破解構建過程以從JAR文件中編譯Java源代碼,否則不起作用。

不應該這樣簡單,將支持庫jar放在libs文件夾中,然後我們就離開了嗎?

沒有「支持庫jar」。 support-v4已經作爲AAR發佈,用於大約兩年前的20.0.0,用於支持AAR的構建工具(Gradle,Maven)。

+0

好的,所以我留下來的「唯一」選項是解壓縮jar,並在我的構建中包含支持庫文件? –

+1

@Krøllebølle:理想情況下,你離開Ant。谷歌已經將開發人員從兩年前的開發版本中剔除。當然歡迎您嘗試解壓縮AAR,並採取各種措施,並將它們集成到您的Ant構建中。俗話說,「你的里程可能會有所不同」。或者,回到'19.1.0',這是作爲JAR正式發佈的最後一個版本。 – CommonsWare