OpenVPN с ProGuard NoSuchMethodError
Я использую ICS-OpenVPN для разработки приложения VPN на Android. Все работает нормально без Proguard, но я хочу добавить некоторую защиту к своему коду, поэтому я включил ее. Но я продолжаю получать следующую ошибку:
Неустранимое исключение: java.lang.NoSuchMethodError: нет статического метода "Lnet/ OpenVPN /ovpn3/ovpncliJNI;.SwigDirector_ClientAPI_OpenVPNClient_tun_builder_new(Lnet/ OpenVPN /ovpn3/ClientAPI_OpenVPNClient;)Z" на net.openvpn.ovpn3.ovpncliJNI.swig_module_init(ovpncliJNI.java) в net.openvpn.ovpn3.ovpncliJNI.(ovpncliJNI.java:515) в net.openvpn.ovpn3.ovpncliJNI.new_ClientAPI_OpenVPNClient(ovpncliJNI.java. devpncliJNI.java) в.NET.ovpnapi.java.vpncliJNI.java).blinkt.openvpn.core.OpenVPNThreadV3.(OpenVPNThreadV3.java:39) по адресу de.blinkt.openvpn.services.OpenVPNService.o(OpenVPNService.java:387) по адресу de.blinkt.openvpn.serviceLocker.OpenVPn.services.OpenVPNVPN_CADNCK1 (cdBBBLinkT_Openvpn.services.OPR.java) в de.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
где хранятся все удаленные классы.