【问题标题】:Android proguard having trouble running an APK with linked project librariesAndroid proguard 在运行带有链接项目库的 APK 时遇到问题
【发布时间】:2011-07-06 21:00:22
【问题描述】:

我正在尝试导出使用几个不同库的 android 应用程序。其中两个库是 jar 文件,但其他库是链接项目。例如,其中一个库是地图视图气球视图。要使用该库,我将项目添加到我的工作区,转到它的项目属性,并在 Android 下将项目标记为“用作库”。然后在我正在构建的应用程序中,我使用其路径(在 Android 菜单中)链接了项目库。该应用程序正确导出,但是当我尝试在我的开发手机上运行该应用程序时,它会崩溃并出现以下错误:

07-06 13:50:00.238: 错误/AndroidRuntime(3282): 由: java.lang.ClassNotFoundException: com.markupartist.android.widget.ScrollingTextView 在加载器 dalvik.system.PathClassLoader[/system/framework/ com.google.android.maps.jar:/data/app/com.alltrails-1.apk]

我的 proguard 文件包含以下内容:

-不要警告 -不要注意 -dontskipnonpubliclibraryclasses -libraryjars 库/osmdroid-android-3.0.4.jar -libraryjars 库/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.jar

提前致谢!!

【问题讨论】:

    标签: android projects proguard


    【解决方案1】:

    您的应用程序中缺少 com.markupartist.android.widget.ScrollingTextView 类。如果它位于某个库 jar 中,则应将该 jar 指定为程序 jar (-injars),因为库 jar 的内容不会被复制到输出 jar 中。

    【讨论】:

    • 感谢 Eric 的回复。我实际上解决了这个问题。 markupartist 包是一个“库项目”(我工作区中的一个项目,我将我的实际项目链接到它)所以我必须在我的 proguard.cfg 中添加以下内容:-keep public class com.markupartist.android.** {公共保护 *; }
    • 在这种情况下,只保留类 ScrollingTextView (可能还有一些非默认构造函数)可能就足够了。就 ProGuard 而言,库代码只是普通的程序代码。仅当处理后的代码用作通用库时,才需要保留所有公共库类和类成员。
    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 2021-02-15
    • 1970-01-01
    • 2017-07-13
    • 2022-06-11
    • 2017-11-17
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多