gpt4 book ai didi

java - 为什么接口(interface)(方法名称)的实现会被混淆,即使 proguad 中存在 '-keep interface'

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:09 25 4
gpt4 key购买 nike

我有Android项目。项目使用一些java库。我添加到 proguard.cfg 行:

-keep class my.library.package.** { *; }
-keep 接口(interface) my.library.package.** { *; }

构建后,我发现,是的,包 my.library.package 中的所有类和接口(interface)都没有更改。

我的主项目中有一个类,它实现了 my.library.package 中的接口(interface)。我看到了什么?实现方法的名称被混淆。

更多细节。我在 my.library.package 中有接口(interface):

public interface IMyInterface {
void myMethod();
}

我有类(class),不在my.library.package:

public class MyClass implements IMyInterface  {

// ...

void myMethod() {
// ..
}
}

构建后,我将类视为 *.class 文件:

// It's ok, that class MyClass now have name e.   
public class e implements IMyInterface {

// Own variables and methods of class are obfuscated. Its' ok.

// Why here a(), not myMethod()?
void a() {
// Here obfuscated code too. It's ok.
}
}

UPD当然,我可以向 proguard.cfg 添加新行:

-keep class com.some.package.MyClass {
void myMethod();
}

但是我可以使用很多开源库,并且混淆这些代码是没有意义的。因此,对于每个接口(interface),我需要将行添加到 proguard.cfg 中。噩梦!

最佳答案

ProGuard 不会重命名由其他类实现的保留接口(interface)方法。否则大多数应用程序将不再工作。

您的 -injars、-libraryjars 选项可能配置错误,您应该已经在构建日志中看到一些警告。

关于java - 为什么接口(interface)(方法名称)的实现会被混淆,即使 proguad 中存在 '-keep interface',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37616077/

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