Android Proguard 在使用 AVG Antivirus 时遇到一些问题

Posted

技术标签:

【中文标题】Android Proguard 在使用 AVG Antivirus 时遇到一些问题【英文标题】:Android Proguard have some trouble with AVG Antivirus 【发布时间】:2016-11-02 05:49:25 【问题描述】:

我制作了一个一直运行良好的安卓应用。突然,AVG Antivirus 报告我的应用程序是恶意软件。几个小时后,我发现了问题:

在 build.gradle 中,如果我使用下面的配置生成签名的 APK,AVG 报告(APK)为恶意软件:

buildTypes 
    release 
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    

但如果我评论最后一行,则没有发现威胁:

buildTypes 
    release 
        shrinkResources true
        minifyEnabled true
        //proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    

我的 proguard-rules.pro 没有什么特别的:

-keepattributes Signature
-keepattributes *Annotation*
-keepattributes EnclosingMethod
-keep class io.codetail.animation.arcanimator.**  *; 
-keep class com.example.viewholders.** 
  *;

-keep class com.android.vending.billing.**
-keep class cn.pedant.SweetAlert.Rotate3dAnimation 
    public <init>(...);

-keepclassmembers class com.example.models.** 
  *;

我正在使用 Android Studio 2.2.2,我的项目使用 Firebase。我的 android 设备中的 AVG Antivirus 版本是 5.9.0.1.224656。

AVG 识别的“恶意软件”是 Android/gp oi bccfdd。

有什么办法可以解决这个问题吗?

【问题讨论】:

proguard-rules.pro 中删除keep classkeepclassmembers 行并重新构建 @Apurva,我无法删除这些行,因为我的应用程序需要它们。 从 proguard 文件中删除这些行不会从您的包中删除这些类。 -keep class 用于以原始格式保留列出的类,因此 proguard 在构建包时不会对这些类进行编码。所以从你的 proguard 文件中删除这些行是安全的,它只会以无法识别的形式对类进行编码。 是的,我知道,我的意思是为了避免 Firebase 数据库、Android 计费和我使用的库、SweetAlert 和另外一个库出现错误,这些行是必需的。无论如何,我尝试了你的建议,但没有用。 【参考方案1】:

终于找到了解决办法。只是为了改变这一行:

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

有了这个:

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

根据Android Studio User Guide:

"提示:要进一步压缩代码,请尝试位于同一位置的 proguard-android-optimize.txt 文件。它包含相同的 ProGuard 规则,但具有其他优化在字节码级别(在方法内部和跨方法)执行分析,以进一步减小 APK 大小并帮助它更快地运行。”

不幸的是,我意识到,这可能会导致防病毒软件错误地检测到恶意软件。

【讨论】:

以上是关于Android Proguard 在使用 AVG Antivirus 时遇到一些问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Eclipse 中使用 Proguard 进行 Android 开发时,如何检查/升级 Proguard 版本?

在 Android 上使用 OrmLite 进行 Proguard

在 Eclipse 中使用 Proguard for Android 出错

使用 Proguard 在 Android 中禁用日志

Proguard 使用 DNSJava 库混淆 Android 代码

如何在 android 中使用 ProGuard 和 OrmLite