2011-07-06 52 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而言,库代码只是普通的程序代码。保留所有公共图书馆类和类成员只有在处理后的代码被用作通用图书馆时才需要。 –