在 proguard 之后,点击在发布 apk 中不起作用

Posted

技术标签:

【中文标题】在 proguard 之后,点击在发布 apk 中不起作用【英文标题】:Clicks not working in release apk after proguard 【发布时间】:2016-10-19 08:08:15 【问题描述】:

我可以将应用程序部署到模拟器甚至真正的 android 智能手机,一切正常,但是当我创建发布 apk 并将其传输到手机时,我无法播放,因为点击不起作用。实际上,我可以单击按钮,但它们不会执行。就像“播放”按钮一样,当我单击它时表明我正在单击它,但它并没有开始游戏。我玩过很多proguard,甚至尝试将minifyEnabled更改为false并将shrinkResource更改为false,但现在它给出了有关锁定PID错误的错误。到目前为止我所知道的一切都试过了。我知道我不能在 proguard 文件中包含一些我无法得到它的东西。

我的 proguard 文件:

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-verbose

默认情况下优化是关闭的。 Dex 不喜欢代码通过 ProGuard 优化和预验证步骤运行(并且自己执行其中一些优化)。

-dontoptimize

-dontpreverify

注意,如果要启用优化,不能只在自己的项目配置文件中包含优化标志;相反,您需要指向 "proguard-android-optimize.txt" 文件,而不是 project.properties 文件中的这个文件。

-keepattributes *Annotation*

-keep public class com.google.vending.licensing.ILicensingService

-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * 
    native <methods>;`



-keepclassmembers public class * extends android.view.View 
   void set*(***);
   *** get*();

我们希望在 Activity 中保留可以在 XML 属性 onClick 中使用的方法

-keepclassmembers class * extends android.app.Activity 
   public void *(android.view.View);

枚举

-keepclassmembers enum * 
    public static **[] values();
    public static ** valueOf(java.lang.String);



-keepclassmembers class * implements android.os.Parcelable 
  public static final android.os.Parcelable$Creator CREATOR;


-keepclassmembers class **.R$* 
    public static <fields>;

支持库包含对较新平台版本的引用。如果此应用程序链接到较旧的平台版本,请不要警告那些。我们知道它们,而且它们很安全。

-dontwarn android.support.**

了解@Keep 支持注解。

-keep class android.support.annotation.Keep


-keep @android.support.annotation.Keep class * *;


-keepclasseswithmembers class * 
    @android.support.annotation.Keep <methods>;



-keepclasseswithmembers class * 
    @android.support.annotation.Keep <fields>;



-keepclasseswithmembers class * 
    @android.support.annotation.Keep <init>(...);


结束

我的build.gradle 文件有这样的proguard:

buildTypes 
    release 
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt')
    

我没有使用任何自定义文件。我以前做过,但只是删除了,现在我在逗那个 txt 文件。

我正在使用 multiDex 导致文件太大。 我正在使用 firebase 核心外部库。以下是库:

dependencies 
    compile 'com.google.android.gms:play-services-  appindexing:9.0.2'
    compile 'com.google.android.gms:play-services-analytics:9.0.2'
    compile 'com.google.android.gms:play-services-location:9.0.2'
    compile 'com.google.android.gms:play-services:9.0.2'
    compile 'com.google.android.gms:play-services-ads:9.0.2'
    compile 'com.google.android.gms:play-services-auth:9.0.2'
    compile 'com.google.android.gms:play-services-gcm:9.0.2'
    compile 'com.google.firebase:firebase-core:9.0.2'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:support-v4:24.0.0

由于这个问题,我无法发布我的第一个应用程序。

【问题讨论】:

【参考方案1】:

好的,通过禁用 proguard 功能让它工作,虽然我也很想知道如何使用 proguard。现在应用程序是 17mb,但使用 proguard 可能会更小?

【讨论】:

以上是关于在 proguard 之后,点击在发布 apk 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

仍然可以访问proguard apk吗?

Proguard 在构建发布 apk 时导致错误

使用 Android Studio 签署 APK 时出现 Proguard 错误

在 Android Studio 3 中激活 proguard 生成签名 Apk 时出错

如何通过 Eclipse 使用 Proguard 混淆 apk?

使用 Joda Time 时无法生成启用 proguard 的签名 APK