在android中启用proguard时,应用程序无法正常工作

时间:2013-02-11 10:06:06

标签: android proguard

我的项目在Android设备和模拟器上运行完美。

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

我的假设是,在安装.apk文件时没有调用Service,我的日志没有出现任何错误。

请分享您的想法。

这是我的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

请分享您的想法。

谢谢。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

假设你保持ADT最新......

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

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

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

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

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

使用以下方法重新安装:

adb install App-release.apk

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

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