相关疑难解决方法(0)

Gradle:DSL元素“ useProguard”已过时,将很快被删除

自Android Studio 3.5更新以来,在构建我的应用程序时出现此警告:

DSL元素“ useProguard”已过时,将很快被删除。在gradle.properties中使用'android.enableR8'在R8和Proguard之间切换。

android proguard gradle r8

10
推荐指数
2
解决办法
3715
查看次数

更新到android gradle插件3.5后的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

6
推荐指数
2
解决办法
397
查看次数

在Android上使用R8时,是否需要卸载现有的Proguard?

使用R8时是否需要从Gradle中删除与Proguard相关的代码?

minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
Run Code Online (Sandbox Code Playgroud)

android android-studio android-proguard r8

5
推荐指数
1
解决办法
1323
查看次数

proguard-rules.pro似乎不适用于R8

我今天早些时候将Android Studio升级到3.4,并且第一次使用默认的收缩器R8。我将proguard-project.txt图书馆项目的内容复制到proguard-rules.proproguard-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 android-proguard android-r8 r8

4
推荐指数
1
解决办法
1154
查看次数

如何为我的 android 应用程序添加代码混淆

如何为 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 文件 在此处输入图像描述

android

4
推荐指数
1
解决办法
6224
查看次数

R8 问题:由于错误 GC 开销限制超出,无法设置 Proguard minifyEnabled

使用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 android-r8

4
推荐指数
1
解决办法
1845
查看次数

升级到 Android Gradle 插件 3.4.0 后类不再混淆

升级到 Android Gradle 插件 3.4.0 后,基本类不再被混淆。

以下基本步骤可以重现该问题:

  1. 在 Android Studio 中创建一个新的空项目
  2. app/build.gradle更改minifyEnabledtrue
  3. 创建以下类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)
  4. 请参阅以下课程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 android-proguard

3
推荐指数
1
解决办法
2155
查看次数

Android R8 不会混淆类名

过去几个小时我一直在研究这个,但没有任何运气。无论如何,类名都不会被混淆。这些只是常规类,而不是活动、服务或 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)

android proguard android-r8

3
推荐指数
1
解决办法
1845
查看次数