自Android Studio 3.5更新以来,在构建我的应用程序时出现此警告:
DSL元素“ useProguard”已过时,将很快被删除。在gradle.properties中使用'android.enableR8'在R8和Proguard之间切换。
我将json某些对象的表示形式保存为应用程序中的缓存。更新应用程序的每个发行版之后我都没有问题,并且json对象已正确转换为Java对象。更新到android gradle plugin 3.5之后(添加此行):
classpath 'com.android.tools.build:gradle:3.5.0'
Run Code Online (Sandbox Code Playgroud)
当我创建发行版apk时,似乎无法将json字符串转换为java对象,并且混淆的名称似乎已更改。当我将其还原到gradle插件3.4.2时,一切正常。那么问题是什么,我该如何解决?
android proguard gradle android-studio android-gradle-plugin
使用R8时是否需要从Gradle中删除与Proguard相关的代码?
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
Run Code Online (Sandbox Code Playgroud) 我今天早些时候将Android Studio升级到3.4,并且第一次使用默认的收缩器R8。我将proguard-project.txt图书馆项目的内容复制到proguard-rules.pro。proguard-project.txt完美地为这个项目工作,生成了供其他应用程序项目使用的aar文件。
文件proguard-rules.pro似乎并没有被使用。该项目的内容如下build.gradle:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro'
signingConfig signingConfigs.Release
}
debug {
signingConfig signingConfigs.Debug
}
}
Run Code Online (Sandbox Code Playgroud)
proguard-rules.pro 具有以下内容:
# Preserve all public classes, and their public and protected fields and methods.
-keep public class * {
public protected *;
}
Run Code Online (Sandbox Code Playgroud)
谁能提供解决此问题的技巧?
如何为 android apk 添加代码混淆。我使用过proguard但仍然看到来自 app 的代码decompiler。
我添加了这样的程序
release {
debuggable true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
Run Code Online (Sandbox Code Playgroud)
反编译后它会看到我的所有代码和类。反编译后
我的 Proguard 文件 在此处输入图像描述
使用minifyEnabled true选项生成发行包时出错。以下是给我错误的 Gradle 设置:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
我还发现任务 transformClassesAndResourcesWithR8For... 花费了太多时间(最多 10-20 分钟)
错误:
java.lang.OutOfMemoryError: GC overhead limit exceeded在Gradle任务transformClassesAndResourcesWithR8ForCommonRelease中
升级到 Android Gradle 插件 3.4.0 后,基本类不再被混淆。
以下基本步骤可以重现该问题:
app/build.gradle更改minifyEnabled为true创建以下类ProguardTestClass.java:
public class ProguardTestClass {
public interface ProguardTestInnerInterface {
void proguardTestCallback(String message);
}
public static void proguardTestMethod(String input, ProguardTestInnerInterface impl) {
impl.proguardTestCallback("proguardTestMethod received input=[" + input + "]");
}
}
Run Code Online (Sandbox Code Playgroud)请参阅以下课程MainActivity.java:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ProguardTestClass.proguardTestMethod("MainActivity's ProguardTestClass", new ProguardTestClass.ProguardTestInnerInterface() {
@Override
public …Run Code Online (Sandbox Code Playgroud)过去几个小时我一直在研究这个,但没有任何运气。无论如何,类名都不会被混淆。这些只是常规类,而不是活动、服务或 Android 清单中的其他内容(我知道这些不会被混淆)。我在这里缺少什么?
Android Gradle Plugin version: 4.0.0
Gradle version: 6.1.1
Android Studio version: 4.0
Run Code Online (Sandbox Code Playgroud)
在这些版本中,R8 应默认启用。这是我的 buildType 配置:
buildTypes {
release {
//useProguard false // even tried this without luck
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 proguard-rules.pro
-ignorewarnings
# --- Glide ---
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
# --- Billing library ---
-keep class …Run Code Online (Sandbox Code Playgroud)