2011-07-23 28 views
4

我維護一個Android應用程序,並沒有使用Eclipse。我沒有使用Eclipse。我正在使用antbuild.xmlbuild.properties如何在沒有Eclipse的APK中包含JAR?

我把我的.jar文件放到libs /目錄下。我的代碼編譯只是丹迪。但是,當我在模擬器上運行它,輸出APK不包含的.jar,所以我得到一個運行時堆棧跟蹤:

ERROR/AndroidRuntime(470): java.lang.NoClassDefFoundError: com.google.ads.AdView 

build.properties看起來是這樣的:

jar.libs.dir=libs 

而庫/目錄包含我的.jar文件。

需要在build.xml中做些什麼才能讓外部的.jar文件包含在APK中?

編輯:理論上這個答案應該可行,但它不適合我。它過時了嗎?是什麼賦予了? How to add external jar libraries to an android project from the command line

回答

1

事實證明,我需要將我使用的版本ant升級到1.8。在編譯過程中,我已經收到此錯誤信息:

警告:參考out.dex.jar.input.ref還沒有確定在運行時, 但被發現duringbuild文件的解析,試圖解決。未來 Ant的版本可能支持在未執行的目標中定義的引用ID。

我用它搜索了一下,發現我需要升級Ant,現在我沒有得到這個警告,並且我的應用程序沒有強制關閉。

0

需要在build.xml中做些什麼才能使外部.jar文件包含在APK中?

只要把它放在libs/就足夠了。

我build.properties看起來是這樣的:

這行不應該是必要的。它不會出現在我的build.properties文件中,這些文件可以用JAR文件成功構建。

如果您使用項目的bin/目錄中的dexdump -f classes.dex,您將能夠確定com.google.ads.AdView是否在該目錄中。如果沒有,那麼你的構建腳本有些奇怪。如果是這樣,那麼可能有一個依賴JAR,你失蹤(雖然我預計VerifyError在這種情況下)。

+0

嗯。所以它必須是我的build.xml中的東西,然後; 'dexdump -f classes.dex | grep -in adview'產生'3080:0x0013 - 0x0040 reg = 0 adView Lcom/google/ads/AdView;' – poundifdef

+0

雖然我的build.xml基本上是默認的自動生成的, – poundifdef

+0

@poundifdef:不,因爲你看到這意味着該類應該在APK文件中(您可以通過解壓縮APK並從中檢查'classes.dex'來確認,但它應該是相同的AFAIK)。因此,要麼你錯過了一個依賴JAR,要麼就是你試圖創建'AdView'(例如,使用自定義類加載器)有些奇怪。 – CommonsWare

0

你使用第三方庫,但你似乎沒有運行DX。確保不僅你的代碼由DX工具處理(我假定Ant會這樣做),還包括你使用的所有第三方庫。您可以查看我用於將Web應用程序轉換爲Android davlik格式的7Bee腳本,因此它也可以爲您工作。您可以在Atjeews頁面找到更多關於腳本的信息。

0

解決方案:

  1. 在項目樹中右擊項目,然後選擇項目 性能
  2. 選擇Java Build Path
  3. 選擇Tab順序 和導出
  4. 檢查GoogleAdMobAdsSdk-4.0.4 .jar(或您的 版本SDK)
  5. 按確定
  6. 清潔工程通過菜單項目 - >清潔
  7. 改造項目(項目 - 自動構建)
+0

嗨;感謝這個答案!然而,這與使用eclipse有關,而且我在問怎麼做*沒有* eclipse! – poundifdef

4

我只是過來了類似的問題,並注意到,圖書館不應該放在「myprojectdir \ LIB」。當我將它們移動到「myprojectdir \ libs」時,一切都開始奏效。

相關問題