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 class
和keepclassmembers
行并重新构建
@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 出错