【问题标题】:Application is not working when enabled proguard in android在android中启用proguard时应用程序无法正常工作
【发布时间】:2013-07-25 04:58:17
【问题描述】:

我的项目在安卓设备和模拟器上运行良好。

但是,如果我在启用 proguard 应用程序后导出并获取 .apk 文件,我无法使用 proguard 安装此 .apk 文件。

我的假设是,安装 .apk 文件时未调用服务,并且我的日志中没有任何错误。

请分享您的想法。

这是我的 proguard 文件。

-optimizationpasses 5
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dontoptimize
# -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-libraryjars /usr/local/android-sdk/add-ons/google_apis-7_r01/libs/maps.jar

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepattributes JavascriptInterface

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
    }
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-keep class mypackage.MyCallbackClass {
    void myCallbackMethod(java.lang.String);
}

-dontwarn android.support.**
-dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry

还有我的** project.properties 文件**

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}\\tools\\proguard\\proguard-android.txt:proguard-project.txt
#proguard.config=proguard.cfg
# Project target.
target=Google Inc.:Google APIs:11
android.library.reference.1=../Library1
android.library.reference.2=../Library2

请分享您的想法。

谢谢。

【问题讨论】:

    标签: android proguard


    【解决方案1】:

    我想您正在使用发布密钥签署此版本。 如果您在手机上安装了旧版本(带有调试密钥),请先将其卸载。(您的设备上不能拥有具有两个不同签名的同一个应用)

    【讨论】:

    • 感谢您的回复文斯。我使用“adb uninstall myProject.apk”通过命令提示符从我的设备上卸载了该应用程序。但是从启动页面开始时卡住了。现在,我可以看到这个错误“!!! FAILED BINDER TRANSACTION !!!”在我的日志上。
    【解决方案2】:

    当您溢出 Binder 进程时,通常会发生 BINDER TRANSACTION 失败。如果您没有在启动页面上使用大位图(这是绑定器事务失败的最常见原因),那么它可能是 ParcelFormatException,因为我注意到您正在尝试在您的 apk 中使用 Parcelable。

    【讨论】:

      【解决方案3】:

      假设您使 ADT 保持最新..

      如果您使用 Eclipse 导出构建应用程序的发布版本,它将从 project.properties 中的 proguard.config 属性指定的文件中加载 Proguard 设置。

      如果您使用ant release,它将从ant.properties 中的proguard.config 属性指定的文件中加载Proguard 设置。

      话虽如此,您在构建过程中是否收到任何类型的错误或警告?这些在诊断 Proguard 时特别有用,因为它的目的是删除它认为您的应用程序正在使用的类和方法。

      我使用以下方式卸载我的应用程序:

      adb shell pm uninstall -k com.*example*.*app*
      

      然后重新安装:

      adb install App-release.apk
      

      如果它给出关于兼容性的错误,我通过从卸载命令中排除 -k 开关来丢弃以前的应用程序数据:

      adb shell pm uninstall com.*example*.*app*
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-26
        • 1970-01-01
        • 1970-01-01
        • 2018-05-08
        • 2016-03-19
        相关资源
        最近更新 更多