2012-08-03 39 views
1

我想用螞蟻來建立我的項目與庫中的jar,build.xml的生成是成功的,但是當我執行ant release時,編譯時出現錯誤。如何使用ant(錯誤無法找到符號)與外部庫建立一個android應用程序?

[javac] E:\Project\Pascal\Source\workspace\xxx\src\com\xxx\xxx\uti 
ls\CommonUtil.java:1267: cannot find symbol 
[javac] symbol : method setOTAMode() 
[javac] location: class android.os.RecoverySystem 
[javac]    RecoverySystem.setOTAMode(); 
        ^

但在eclipse中,我可以成功編譯。所以我應該需要添加手動build.xml中的jar,但我被告知,Android的螞蟻會看在libs目錄的jar後,我在base_rules.xml發現

<property name="jar.libs.dir" value="libs" /> 
<property name="jar.libs.absolute.dir" location="${jar.libs.dir}" /> 
<property name="native.libs.absolute.dir" location="libs"/

因此,如何能我解決這個問題。

編輯:我的應用程序中指定的BSP它具有方法setOTAMode開發的,但我的標準SDK開發的,所以爲了成功編譯,我添加了具有相同的包名android.os.RecoverySystem在BSP一個罐子假的Java編譯器。然後,當您在BSP中運行應用程序時,將調用BSP中的真實方法。

所以android.os.RecoverySystem被定義在罐子裏並且setOTAMode被聲明。

回答

0

該符號不是來自您的JAR,因爲您的JAR沒有android.os代碼。 android.os.RecoverySystem來自Android SDK。 Android SDK中沒有此類的setOTAMode()方法,因此此代碼永遠不會生成。在Android源代碼AFAICT中甚至沒有一個setOTAMode()方法。

+0

請參閱我的編輯。 – dreamtale 2012-08-04 04:29:56

+0

@dreamtale:您不能簡單地將方法從第三方JAR添加到現有類中。你正在得到'RecoverySystem'的真正定義,它沒有'setOTAMode()'。 AOSP構建過程包括生成您自己的Android SDK版本的方法 - 您需要這樣做並使用這些結果。或者,在運行時使用反射來訪問此方法,而不是直接引用它。 – CommonsWare 2012-08-04 10:51:17

+0

但是爲什麼它在日食建造時有效,有什麼區別? – dreamtale 2012-08-04 12:52:56

相關問題