OpenVPN с ProGuard NoSuchMethodError - PullRequest
0 голосов
/ 10 июля 2020

Я использую 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, где хранятся все удаленные классы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...