gpt4 book ai didi

java - 如何在 android gradle 中免除 pro-guard 的库模块

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:19:23 28 4
gpt4 key购买 nike

我的 Android 应用程序的发布版本因以下异常而崩溃

java.lang.NoSuchMethodError: 没有静态或非静态方法 "Lcom/mm/android/dhproxy/client/DHProxyClient;.InitWithName(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)我"

这个错误在调试版本中没有发现,因此我猜是因为proguard。

上述类位于也使用 JNI 库的模块之一中。我的 proguard-rules app module 文件在下面

-keepattributes InnerClasses
-dontoptimize
-keep class com.mm.android.dhproxy.client.DHProxyClient
-keepclasseswithmembernames class * {
native <methods>;
}
-keep class mypackage.MyCallbackClass {
void myCallbackMethod(java.lang.String);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-printmapping build/outputs/mapping/release/mapping.txt

相关模块的 build.gradle 文件如下

应用插件:'com.android.library'

android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
compileOptions.encoding = 'ISO-8859-1'

defaultConfig {

minSdkVersion 14
targetSdkVersion 23
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}

dependencies {
compile files('libs/IPlaySDK.jar')
compile files('libs/ToUProxy.jar')
}

即使在添加行 -keep class com.mm.android.dhproxy.client.DHProxyClient 之后,我也可以看到 usage.txt 文件包含以下条目

com.mm.android.dhproxy.client.DHProxyClient:
29:35:public boolean initWithName(java.lang.String,int,java.lang.String,java.lang.String)
64:69:public int delPort(int)
136:141:public int queryRate(int,com.mm.android.dhproxy.client.DHProxyRateParam)
158:163:public int p2pSetOption(int,int)
180:185:public int p2pGetOption(int)
192:197:public int exit()
private native int InitWithName(java.lang.String,int,java.lang.String,java.lang.String)
private native int DelPort(int,int)
private native int P2PSetOption(int,int,int)
private native int P2PGetOption(int,int)
private native int QueryRate(int,com.mm.android.dhproxy.client.DHProxyRateParam,int)
private native int Exit(int)
com.mm.android.dhproxy.client.DHProxyRateParam

提前致谢。

最佳答案

解决方法是查找需要免除的方法和类s,然后将它们添加到proguard规则中,如下所示(这里我需要将文件保留在类com.mm.**和com.company.*中* 其中 ** 充当野生字符

-keep class com.mm.** {*;}
-keep class com.company.** {*;}
-keepclassmembers class com.mm.** {*;}
-keepclassmembers class com.company.** {*;}

关于java - 如何在 android gradle 中免除 pro-guard 的库模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38951972/

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