Mic*_*sky 3 android android-gradle-plugin android-proguard
升级到 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 void proguardTestCallback(String message) {
Log.d(TAG, "Proguard test: " + message);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)确认它在使用 Android Gradle 插件 3.4.0 build.gradle
gradle-5.1.1在gradle/wrapper/gradle-wrapper.properties./gradlew clean buildfind . -name mapping.txt | xargs grep "ProguardTestClass -> "预期输出:
com.example.proguardgradleplugin340.ProguardTestClass -> com.example.proguardgradleplugin340.a:
Run Code Online (Sandbox Code Playgroud)
实际输出:
app/build/outputs/mapping/release/mapping.txt没有提到ProguardTestClass.
要查看之前的 Android Gradle 插件版本可以产生预期的输出,请重复上述步骤,但要指向之前版本的 Android Gradle 插件和 Gradle:
build.gradlegradle-4.10.1在gradle/wrapper/gradle-wrapper.properties我试图通过查看我们过去从 Proguard 获取的其他诊断文件进行调查,但它们不再输出(至少在默认情况下不会):
find . -name seeds.txt
find . -name usage.txt
我还查看了 Android Gradle 插件 3.4.0 发行说明,发现它取代了 Proguard,取而代之的是一种“一步集成去糖、收缩、混淆、优化和 dexing”的新技术。
尝试设置useProguard false让插件使用 R8 而不是 ProGuard 来缩小和混淆应用程序的代码和资源。例如
android {
...
buildTypes {
debug {
minifyEnabled true
useProguard false
}
release {
minifyEnabled true
useProguard false
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果你想坚持使用 ProGuard,你应该从gradle.properties下面禁用 R8 :
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false
Run Code Online (Sandbox Code Playgroud)
并记得设置useProguard true.
编辑 #1
在此处查看如何将 Proguard 迁移到 R8:Android/java:Transition/Migration from ProGuard to R8?
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |