2011-07-06 49 views
1

我想導出一個使用兩個不同庫的android應用程序。其中兩個庫是jar文件,但其他庫是鏈接的項目。例如,其中一個庫是一個mapview氣球視圖。要使用該庫,我將該項目添加到了我的工作區中,並轉到項目屬性中,並在Android下將該項目標記爲「用作庫」。然後在我構建的應用程序中,我使用其路徑鏈接項目庫(在Android菜單中)。但是,當我嘗試在我的開發手機上運行應用程序時,應用程序正確導出,並且出現以下錯誤:Android proguard無法與鏈接的項目庫運行APK

07-06 13:50:00.238:ERROR/AndroidRuntime(3282):由於:java.lang。 ClassNotFoundException:com.markupartist.android.widget.ScrollingTextView in loader dalvik.system.PathClassLoader [/system/framework/com.google.android.maps.jar:/data/app/com.alltrails-1.apk]

我ProGuard的文件包含以下內容:

-dontwarn -dontnote -dontskipnonpubliclibraryclasses -libraryjars庫/ osmdroid-Android的3.0.4.jar -libraryjars libs/osmdroid-google-3.0.4.jar -libraryjars libs/slf4j-android-1.5.8.jar -libraryjars/Applications/android-sdk-mac_x86/add-ons/addon_google_apis_google_inc_4/libs/maps。罐子

在此先感謝!

回答

0

應用程序中缺少類com.markupartist.android.widget.ScrollingTextView。如果它位於某個庫jar中,則應該將該jar指定爲程序jar(-injars),因爲庫jar的內容不會被複制到輸出jar中。

+2

謝謝埃裏克的回覆。我其實解決了這個問題。 markupartist包是一個「庫項目」(我的工作區中的一個項目,我將其實際項目鏈接到它),所以我不得不在我的proguard.cfg中添加以下內容:-keep public class com.markupartist.android。{ public protected *; } – kevin78925

+0

在這種情況下,保留類ScrollingTextView(也許是一些非默認構造函數)可能就足夠了。就ProGuard而言,庫代碼只是普通的程序代碼。保留所有公共圖書館類和類成員只有在處理後的代碼被用作通用圖書館時才需要。 –