La dernière fois que j'ai expliqué le réglage d'OpenGL ES, cette fois, j'ai pensé que je continuerais, mais j'ai trouvé que le code C / C ++ peut être utilisé sur Android Alors, faites un détour.
Puisque le code d'OpenGL est majoritairement C / C ++, je m'attendais à ce que "les actifs puissent être utilisés!", Mais l'utilisation était plus difficile que je ne l'imaginais. Je n'ai pas encore tout compris, mais voici un résumé de ce que je comprends.
Je n'ai pas beaucoup d'informations sur le dernier Android Studio, donc j'essaie de trouver quelque chose qui ne va pas, alors j'apprécierais que vous puissiez signaler des erreurs.
Dans Android Studio 2.2, une case à cocher «Voulez-vous utiliser C / C ++?» S'affiche lors de la création d'un nouveau projet, activez-la d'abord.
Vérifiez la configuration du nouveau projet. Changez la structure du projet sur la gauche de "Android" à "Projet" afin que vous puissiez voir tous les fichiers.
C'est OK si vous avez les fichiers suivants.
Une fois que vous l'avez construit, vous devriez voir un TextView à l'écran. Vous pouvez voir que le code de cpp / native-lib.c est appelé depuis MainActivity.java.
public class MainActivity extends AppCompatActivity {
// native-lib.c semble être une bibliothèque à la compilation, et je la charge ici.
//Est-ce quelque chose comme l'importation?
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
/**
* native-lib.Il semble définir la fonction implémentée en c.
*/
public native String stringFromJNI();
}
Je pense que le code suivant est écrit par défaut. En regardant ce code, Il semble que le package, le nom du projet et le nom de la fonction soient liés par un trait de soulignement. C'est peut-être le format.
Il semble qu'il soit défini par la description. La valeur de retour est également sous la forme de "jstring". Je pense que c'était un type Android NDK ou JNI (interface native Java).
#include <jni.h>
#include <string>
extern "C"
jstring
Java_com_test_opengl_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
Tout d'abord, modifiez comme suit pour que extern "C" soit appliqué à l'ensemble.
extern "C" {
//Mettez la fonction ici.
}
Écrivez une fonction de test selon le cas Les arguments sont standard, alors entrez les mêmes.
extern "C" {
//La description de stringFromJNI est omise
void
Java_quad_jp_opengl_MainActivity_sayHello(JNIEnv *env, jobject){
std::cout << "Hello World" << std::endl;
}
}
Bien entendu, la fonction est également définie pour MainActivity.
public native void sayHello();
Quand je l'ai construit, ça s'est terminé sans aucune erreur, je ne savais pas où voir la sortie de cout ... orz
Pour le moment, je sais comment exécuter le processus côté C, modifions donc le code précédent. Je l'ajouterai ici plus tard.
Android NDK (la page officielle a une méthode de configuration détaillée)
Certaines pages ont été traduites, mais la traduction n'est pas assez bonne et c'est un peu déroutant. Ajout de code C / C ++ au projet
Recommended Posts