这是我在Android Studio中的第一个项目,我的应用程序代码没有混淆。我在build.gradle文件中使用以下配置:
![enter image description here](https://istack.dev59.com/RG7CL.webp)
我使用“Build > Generate Signed APK...”并勾选了“Run Proguard”选项。当我使用Apk_OneClick.v4.2进行测试时,我的代码完全易于阅读:
请帮帮我。
这是我在Android Studio中的第一个项目,我的应用程序代码没有混淆。我在build.gradle文件中使用以下配置:
我使用“Build > Generate Signed APK...”并勾选了“Run Proguard”选项。当我使用Apk_OneClick.v4.2进行测试时,我的代码完全易于阅读:
请帮帮我。
你可能没有通过签名向导实际签署APK的发布版本。你可以使用以下命令之一从命令行构建发布版APK:
./gradlew assembleRelease
你可以从 Build Variants 视图中选择发布版本,并从GUI构建:
您可以配置您的 build.gradle 文件来实现 Proguard。它可以在模块级别或项目级别进行配置。
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
所示配置为调试级别,但您可以像下面在buildTypes中自己编写构建类型:
myproductionbuild{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
最好将调试设置为minifyEnabled false
,将生产构建和其他构建设置为minifyEnabled true
。
将您的proguard-rules.txt文件复制到模块或项目文件夹的根目录中,例如:
$YOUR_PROJECT_DIR\YoutProject\yourmodule\proguard-rules.txt
您可以按照自己的意愿更改文件名。配置完成后,使用三个选项之一根据buildType生成您的构建:
在右侧面板中转到gradle任务,搜索模块任务下的assembleRelease/assemble(#your_defined_buildtype)
在左侧面板中转到Build Variant,并从下拉菜单中选择构建
在文件浏览器中转到项目根目录,打开cmd/终端并运行
Linux ./gradlew assembleRelease 或 assemble(#your_defined_buildtype)
Windows gradlew assembleRelease 或 assemble(#your_defined_buildtype)
您可以在模块/build目录中找到apk文件。
有关配置和proguard文件位置的更多信息,请访问以下链接:
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard
runProguard false
你需要使用
minifyEnabled false
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
Retrofit
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Gson
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
代码混淆
-keepclassmembers class com.yourname.models** { <fields>; }
尝试将“proguard-rules.txt”文件重命名为“proguard-android.txt”,并在gradle文件中删除对“proguard-rules.txt”的引用。 getDefaultProguardFile(...)
调用引用了不同的默认proguard文件,由Google提供而不是您的项目中的文件。因此,也要将其删除,以便gradle文件如下:
buildTypes {
release {
runProguard true
proguardFile 'proguard-android.txt'
}
}
启用 ProGuard
android {
buildTypes {
release {
minifyEnabled true
proguardFiles 'proguard-rules.pro'
}
}
}
/release
文件夹中,但我的应用程序有一个不在/release
文件夹中的apk。因此,我花了几个小时反编译错误的apk,想知道为什么我的proguard更改没有任何影响。希望这能帮助到某些人!