Я использую ICS-OpenVPN для разработки приложения VPN на Android. Все работает нормально без Proguard, но я хочу добавить некоторую защиту к своему коду, поэтому я включил его. Но я все время получаю следующую ошибку:
Fatal Exception: java .lang.NoSuchMethodError: no stati c method «Lnet / openvpn / ovpn3 / ovpncliJNI; .SwigDirector_ClientNClient_Opent ovpn3 / ClientAPI_OpenVPNClient;) Z "в net .openvpn.ovpn3.ovpncliJNI.swig_module_init (ovpncliJNI. java) в net .openvpn.ovpn3.ovpnclipn15 *. *. .openvpn.ovpn3.ovpncliJNI.new_ClientAPI_OpenVPNClient (ovpncliJNI. java) в net .openvpn.ovpn3.ClientAPI_OpenVPNClient. (ClientAPI_Open.VPNClient. * 1031.PI_Open.VPNClient. 1032 *: 39) на de.blinkt.openvpn.services.OpenVPNService.o (OpenVPNService. java: 387) на de.blinkt.openvpn.services.OpenVPNService.lambda $ cPRZkdo0sASEkgC_nc9xLvice 10. blinkt.openvpn.services .- $$ Lambda $ OpenVPNService $ cPRZkdo0sASEkgC_nc9xL1TeYBI.run (-. java: 2) в java .lang.Thread.run (Thread. java: 764)
Вот мой файл Proguard:
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
-keep class net.openvpn.ovpn3.* {*;}
-keep class net.openvpn.ovpn3.ovpncli.* {*;}
-keep class net.openvpn.ovpn3.ovpncliJNI.* {*;}
-keep class de.blinkt.openvpn.api.* {*;}
-keep class de.blinkt.openvpn.core.* {*;}
-keep class de.blinkt.openvpn.custom.* {*;}
-keep class de.blinkt.openvpn.services.* {*;}
-keep class de.blinkt.openvpn.* {*;}
И вот часть из build.gradle
, отвечающая за генерацию кода, вызывающего проблему:
File registerGenTask(String variantName, String variantDirName) {
File baseDir = new File(buildDir, "generated/source/ovpn3swig/${variantDirName}")
File genDir = new File(baseDir, "net/openvpn/ovpn3")
tasks.register("generateOpenVPN3Swig${variantName}") {
doFirst {
mkdir(genDir)
}
doLast {
exec {
commandLine "swig", "-outdir", genDir, "-outcurrentdir", "-c++", "-java", "-package",
"net.openvpn.ovpn3", "-Isrc/main/cpp/openvpn3/client", "-Isrc/main/cpp/openvpn3/",
"-o", "${genDir}/ovpncli_wrap.cxx", "-oh", "${genDir}/ovpncli_wrap.h",
"src/main/cpp/openvpn3/javacli/ovpncli.i"
}
}
}
return baseDir
}
EDIT Что бы я ни делал, Proguard продолжает удалять этот важный пакет: net.openvpn.ovpn3.ovpncliJNI
. Я ясно вижу это в usage.txt
, где хранятся все удаленные классы.