JNI attaché de sorte que les bibliothèques tierces

JNI fixé de manière bibliothèques tierces (Android Studio)

Récemment, un projet faisant, si les bibliothèques doivent raccorder d'autres ministères pour fournir, androïde blanc pur, l'Internet pour trouver un tas d'informations et prendre beaucoup de détours finalement articulé le succès initial, l'ensemble du processus de partager avec vous

outils de base

Android Studio, Google outils de développement, beaucoup de version itérative, et en effet il y a de nombreux inconvénients, mais de nombreux développeurs font avec facilement.

La fondation de base

Étant donné que la bibliothèque est monté compilateur c ++, c ++ besoins de base, les connaissances de base JNI devrait également connaître quelques-uns, mais pas les chaussures des enfants peut aller vérifier d'autres informations, ne pas besoin d'apprendre comment le mécanisme de la mémoire profonde, JNI, a appris à une conversion de type sur le même sujet.

La première étape dans la mise en place du projet

Mettre en place le projet d'un natif C où Android Studio, oui, propre exemple Android Studio.

La deuxième étape pour préparer CMkelist

Android Studio structure de répertoire ne veut pas dire ici, ouvrez le fichier dans un répertoire appelé CMakelist principal cpp de, androidstduio sera responsable de tous les processus opérationnels sont concentrés dans ce fichier txt à l'intérieur, la quantité de travail est pas compliqué, il suffit de suivre un format fixe remplissage, exécutera automatiquement Android Studio une commande pour générer un fichier de bibliothèque statique de lien dynamique ainsi.

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             native-lib.cpp )

Ceci est votre propre bibliothèque ainsi produite, il n'y a rien que vous pouvez modifier le local, natif lib.cpp votre propre compilation cpp, appelez les bibliothèques tierces sont impliqués ici, ce qui explique pourquoi la programmation basée sur Android nécessite un c ++ raisons.

find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )

Cela n'a rien à dire, sans modification, voici l'emplacement de positionnement lib.
Ensuite , nous devons ajouter leur propre

target_include_directories(native-lib
        PRIVATE
        ${CMAKE_SOURCE_DIR}/include
        )

Est d'ajouter le fichier d'en-tête, et en informer le chef du dossier du projet.

add_library( # Sets the name of the library.
        abc
        # Sets the library as a shared library.
        SHARED
        # Provides a relative path to your source file(s).
        IMPORTED)
set_target_properties(abc
        PROPERTIES IMPORTED_LOCATION
        ${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libabc.so)

addlibrary ajouter des bibliothèques tierces, et d' informer le type de bibliothèques tierces, est une bibliothèque PARTAGÉ statique, STATIC est une bibliothèque statique.
set_target_properties est d'informer emplacement de la bibliothèque tiers, $ {} ANDROID_ABI est obtenir automatiquement l'architecture du téléphone, comme arm64-v8a.
Comment voulez-vous importer plusieurs bibliothèques tierces, il est conforme à add_library (), set_target_properties () continuent d'ajouter.

target_link_libraries( # Specifies the target library.
                       native-lib  abc abc1 abc2
                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

Les derniers TARGET_LINK_LIBRARIES (), toutes les bibliothèques tierces pour se connecter à notre propre bibliothèque native-lib.

La troisième étape consiste à compiler le fichier natif lib.cpp

Ici, nous allons être un fichier d'en-tête tiers importation, vous pouvez appeler la méthode d'un tiers.

int sum(int i,int j)
{
return i+j;
}

Par exemple, une telle fonction de bibliothèque tierce, nous voulons qu'il soit emballé fonction java

extern "C" JNIEXPORT jint JNICALL
Java_com_example_test_math_sum(JNIEnv* env,jobject /* this */,jint i ,jint j)
{
    jint sum_ = i+jj
    return sum_;
}

spécification JNI est définie comme une fonction, le nom de la fonction est le nom du nom paquet de classe + + nom de la fonction de configuration, les paramètres doivent être transmises de type jni, les paramètres doivent être retournés alors que le type jni, en raison de l'int et directement JINT conversion, le processus de conversion de type de fonction sera omise.

package com.example.test;
public class math{
    static {
        System.loadLibrary("native-lib");
    }
    public int java_math(int i,int j)
    {
        return load(i,j);
    }
    public native long math(int i ,int j);
}

Alors que dans nos classes java et ont également une fonction correspondante correspondant, les mathématiques java d'une telle implémentation simple d'une fonction C ++ () pour un bon paquet.

Publié un article original · a gagné les éloges 2 · vues 49

Je suppose que tu aimes

Origine blog.csdn.net/qq_28666281/article/details/105244948
conseillé
Classement