gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:41:50 28 4
gpt4 key购买 nike

升级到Android Gradle plugin 3.4.0后,基础类不再混淆。

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

  1. 在 Android Studio 中创建一个新的空项目
  2. app/build.gradle 中将 minifyEnabled 更改为 true
  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 + "]");
    }
    }
  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 void proguardTestCallback(String message) {
    Log.d(TAG, "Proguard test: " + message);
    }
    });
    }
    }
  5. 确认它在 build.gradle

  6. 中使用 Android Gradle 插件 3.4.0
  7. 确认它在 gradle/wrapper/gradle-wrapper.properties 中使用 gradle-5.1.1
  8. 在终端选项卡中打开终端窗口
  9. 运行./gradlew clean build
  10. 运行查找。 -名称映射.txt | xargs grep "ProguardTestClass -> "

预期输出:

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

实际输出:

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

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

  1. build.gradle 中更改为 Android Gradle 插件 3.3.2
  2. gradle/wrapper/gradle-wrapper.properties 中更改为 gradle-4.10.1

我试图通过调查其他 diagnostic files that we used to get from Proguard 来进行调查,但它们不再输出(至少不是默认情况下):

找到 . -name seeds.txt找到。 -名称usage.txt

我还检查了 Android Gradle 插件 3.4.0 发行说明,发现它取代了 Proguard,转而支持一项新技术 "integrates desugaring, shrinking, obfuscating, optimizing, and dexing all in one step" .

最佳答案

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

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

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

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

并记得设置 useProguard true


编辑#1

在此处查看如何将 Proguard 迁移到 R8:Android/java: Transition / Migration from ProGuard to R8?

关于android - 升级到 Android Gradle 插件 3.4.0 后类不再混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56032152/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com