2016-03-11 1 views
1

J'ai un petit problème avec une librairie native Android. J'appelle une méthode à partir du code natif comme ceci:Version d'Android NDK Méthode de construction non trouvée

 clazz = env->FindClass("<package>/NativeInterface");; 
     midlog = env->GetStaticMethodID(clazz, "callStr", "(Ljava/lang/String;)V"); 
     jstring jstr = env->NewStringUTF(s.c_str()); 
     env->CallStaticVoidMethod(clazz, midlog, jstr); 

Quand je bâtirai mon application en mode débogage, je n'ai aucun problème avec cela. Mais quand je construis en mode release, je reçois une erreur:

Throwing new exception 'no static method "L<package>/NativeInterface;.callStr(Ljava/lang/String;)V 

pourrait-il que Android Studio est obforscating le code java et mon libary natif ne peut pas trouver Methode plus longtemps? Quel est mon problème ici?

+2

callStr est une méthode privée qui n'est jamais appelée depuis Java? Il pourrait être retiré de la classe par un optimiseur Java –

+1

Oui merci, ProGuard l'a rayé. J'ai ajouté un -keep au fichier de configuration pour garder les méthodes. – Ben

Répondre

1

Obfuscation en soi n'est pas un problème, mais ProGuard peut supprimer les méthodes "inutilisées". Vous pouvez utiliser l'option -keep ou planter un appel fictif pour empêcher l'entrelacement de callStr()