升级到Android Gradle插件3.4.0后,类别不再变得模糊 [英] Class no longer obfuscated after upgrading to Android Gradle plugin 3.4.0

查看:54
本文介绍了升级到Android Gradle插件3.4.0后,类别不再变得模糊的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

升级到Android Gradle插件3.4.0后,基本类不再变得模糊.

After upgrading to Android Gradle plugin 3.4.0, a basic class no longer gets obfuscated.

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

The following basic steps can reproduce the problem:

  1. 在Android Studio中创建一个新的空项目
  2. app/build.gradle中将minifyEnabled更改为true
  3. 创建以下类ProguardTestClass.java:

  1. In Android Studio create a new empty project
  2. In app/build.gradle change minifyEnabled to true
  3. Create the following class, 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 + "]");
    }
}

  • MainActivity.java引用该类:

  • Refer to the class from 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 void proguardTestCallback(String message) {
                        Log.d(TAG, "Proguard test: " + message);
                    }
                });
            }
        }
    

  • 确认它正在使用build.gradle

    预期输出:

    com.example.proguardgradleplugin340.ProguardTestClass -> com.example.proguardgradleplugin340.a:
    

    实际输出:

    app/build/outputs/mapping/release/mapping.txt没有提及ProguardTestClass的任何重命名.

    app/build/outputs/mapping/release/mapping.txt does not mention any renaming of ProguardTestClass.

    要查看以前的Android Gradle插件版本可以产生预期的输出,请重复上述步骤,但请指向以前的Android Gradle插件和Gradle版本:

    To see that prior Android Gradle plugin versions could produce the expected output, repeat the steps above but point to prior versions of Android Gradle plugin and Gradle:

    1. build.gradle
    2. 中更改为Android Gradle插件3.3.2
    3. gradle/wrapper/gradle-wrapper.properties
    4. 中更改为gradle-4.10.1
    1. Change to Android Gradle plugin 3.3.2 in build.gradle
    2. Change to gradle-4.10.1 in gradle/wrapper/gradle-wrapper.properties

    我试图通过调查其他我们诊断出的文件来进行调查曾经从Proguard获取,但不再输出(至少在默认情况下不是):

    I tried to investigate by looking into other diagnostic files that we used to get from Proguard, but they're no longer output (at least not by default anyway):

    find . -name seeds.txt find . -name usage.txt

    我还查看了Android Gradle插件3.4.0发行说明,发现它取代了Proguard,而采用了将脱糖,收缩,混淆,优化和脱色的所有步骤集成在一起"..

    I also checked the Android Gradle plugin 3.4.0 release notes and found out that it replaced Proguard in favor of a new technology that "integrates desugaring, shrinking, obfuscating, optimizing, and dexing all in one step".

    推荐答案

    尝试将useProguard false设置为允许插件使用R8而不是ProGuard来缩小和混淆应用程序的代码和资源.例如.

    Try to set useProguard false to let the plugin use R8 instead of ProGuard to shrink and obfuscate your app’s code and resources. E.g.

    android {
        ...
        buildTypes {
            debug {
                minifyEnabled true
                useProguard false
            }
            release {
                minifyEnabled true
                useProguard false 
            }
        }
    }
    

    或者,如果您想坚持使用ProGuard,则应从gradle.properties禁用R8,如下所示:

    Or alternatively, if you want to stick to ProGuard, you should disable R8 from gradle.properties like below:

    # Disables R8 for Android Library modules only.
    android.enableR8.libraries = false
    # Disables R8 for all modules.
    android.enableR8 = false
    

    请记住设置 useProguard true .

    And remember to set useProguard true.

    编辑#1

    在此处查看如何将Proguard迁移到R8: Android/java:从ProGuard过渡/迁移到R8?

    Check here for how to migrate Proguard to R8: Android/java: Transition / Migration from ProGuard to R8?

    这篇关于升级到Android Gradle插件3.4.0后,类别不再变得模糊的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    相关文章
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆