簡體   English   中英

如何從命令行向android項目添加外部jar庫

[英]How to add external jar libraries to an android project from the command line

我正在嘗試構建一個具有一些依賴關系的Android項目。 jar文件位於lib /目錄中。 我可以通過將這些jar文件添加到我的類路徑來構建項目,但當然它在模擬器中強制關閉,因為這些庫不存在。

我是從命令行使用ant( 不是在eclipse中)這樣做的。 如何從命令行中將它包含在apk中?

Jay K的答案在撰寫本文時是對的,但現在SDK已經改變了,這是實現它的新方法:

ant.properties添加到ant.properties

jar.libs.dir=lib

僅供將來參考:目前SDK中存在一個錯誤,無法使用jar.libs.dir: http//code.google.com/p/android/issues/detail? id = 33194

一個簡單的解決方案是再次使用jar.libs.dir(等待修復bug),就是在build.xml文件中添加這個目標:

<target name="-pre-compile">
    <path id="project.all.jars.path">
        <path path="${toString:project.all.jars.path}"/>
        <fileset dir="${jar.libs.dir}">
            <include name="*.jar"/>
        </fileset>
    </path>
</target>

在編譯時這樣做:

javac -encoding ascii -target 1.5 -d bin/classes \
-bootclasspath $SDKDIR/android.jar src/some/project/* -classpath=libs/*.jar

而且,當您為Dalvik生成字節碼時:

dx --dex --output=bin/classes.dex bin/classes libs/*.jar

此外,當您打包APK文件時:

apkbuilder bin/something.apk -z bin/projectname.ap_ \
-f bin/classes.dex -rf src -rj libs

我假設你使用Linux ...在Windows上幾乎是一樣的。

回答我自己的問題:

我創建了一個文件“build.properties”並添加了該行

external.libs.dir=lib

這真是一個幸運的猜測。

上面的例子不太合適。 您無法覆蓋project.all.jars.path內聯。 以下是一個工作示例:

<target name="-pre-compile">
<!-- HACK to add the android-support-v4.jar to the classpath directly from the SDK -->

    <echo>ORIGINAL jars.path : ${toString:project.all.jars.path}</echo>
    <path id="project.all.jars.path.hacked">
            <path path="${toString:project.all.jars.path}"/>
            <path path="${sdk.dir}/extras/android/support/v4/android-support-v4.jar"/>
    </path>

    <path id="project.all.jars.path">
            <path path="${toString:project.all.jars.path.hacked}"/>
    </path>
    <echo>HACKED jars.path : ${toString:project.all.jars.path}</echo>

</target>

如果將庫存儲在$ {basedir} / libs中,則ant腳本將能夠找到它們。

我查看了當前的ant腳本($ {sdk.dir} /tools/ant/build.xml),並將jar.libs.dir定義為“libs”。

僅供參考,螞蟻腳本有良好的文檔記錄,因此很容易追蹤。

如果你移動libs,一定要編輯你的.classpath文件,以防止eclipse用戶不必要地遭受痛苦。

external.libs.dir=lib

經過2個小時的搜索,這對我有用。 我的libs目錄中的jar文件最終編譯並與APK捆綁在一起。

將jar放在${YOUR_PROJECT}/libs目錄中

jar.libs.dir屬性是一個目錄。 它不像CLASSPATH,它是以冒號/分號分隔的列表。 在jar.libs.dir中擁有多個目錄的方法是不直接設置它; 讓它默認為libs並轉到libs並創建所需的.jar文件所需的軟鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM