AndroidStudio Faisons référence au C ++ dans le module des autres projets (Java / kotlin)

"Reportez-vous au module C ++ dans Android Studio (Java / kotlin)" https://qiita.com/sanoh/items/484e61729ab69f250fec

Mémorandum de procédure pour faire référence au module créé à partir d'autres projets

■ Étape 1: créer un projet

2019-05-30.png Créez un projet à partir de "Fichier" "Nouveau" "Nouveau projet". 2019-05-30 (1).png Sélectionnez "Native C ++" puis appuyez sur "Suivant". 2019-05-30 (2).png Cette fois, le nom est "test03" L'emplacement d'enregistrement spécifie le répertoire de travail Le langage spécifie "Java" (Kotklin est très bien) Après avoir terminé les paramètres, cliquez sur «Suivant» pour passer à l'écran suivant. 2019-05-30 (3).png "Terminer" termine la création du projet.

■ Étape 2: reportez-vous aux modules d'autres projets

Modifiez settings.gradle pour référencer le module externe.

settings.gradle


include ':app', ':native-module'
project(':native-module').projectDir = new File(settingsDir, '../test02/test02module')

Veuillez ajuster la position du module test02 auquel vous souhaitez vous référer dans ce projet Si vous appuyez sur "Synchroniser maintenant" ici 2019-05-30 (5).png Vous pouvez voir qu'il a été ajouté au projet.

Puis modifiez le build.gradle de l'application (Module: app).

build.gradle


android {
  :
  :
}

dependencies {
  :
  :
    implementation project(':native-module')
}

Maintenant que nous avons ajouté le module natif, il peut être référencé par l'application.

■ Étape 3: reportez-vous à l'application

Inscrivez-vous dans CmakeLists.txt.

python


CmakeList.txt
![2019-05-30 (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/556e419a-8a91-2280-f71a-d034063919f0.png)

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.4.1)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

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)

include_directories(../../../../../test02/test02module/src/main/cpp)
add_library( native-module
        SHARED
        IMPORTED )
set_target_properties( native-module
        PROPERTIES IMPORTED_LOCATION
        ../../../../../../test02/test02module/src/lib/${ANDROID_ABI}/libnative-module.so)

# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

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)

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

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

Enfin, à partir de native-lib.cpp, reportez-vous à la classe dans le module.

native-lib.cpp


#include <jni.h>
#include <string>

#include "subTest.h"

extern "C" JNIEXPORT jstring JNICALL
Java_l_toox_test03_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    subTest ss;
    ss.Hoge(32);
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

Recommended Posts

AndroidStudio Faisons référence au C ++ dans le module des autres projets (Java / kotlin)
Reportez-vous à C ++ dans le module Android Studio (Java / kotlin)
Langage Java du point de vue de Kotlin et C #
J'ai essayé de résumer les bases de kotlin et java
Comment dériver le dernier jour du mois en Java
Exemple de code pour obtenir les valeurs des principaux types SQL dans Java + Oracle Database 12c
La milliseconde définie dans /lib/calendars.properties de Java jre est UTC
Créons une application TODO en Java 5 Changer l'affichage de TODO
Comment obtenir la longueur d'un fichier audio avec Java
Comment incrémenter la valeur de Map sur une ligne en Java
Obtenez le résultat de POST en Java
Essayez de résoudre Project Euler en Java
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Comment trouver le nombre total de pages lors de la pagination en Java
Comment obtenir la date avec Java
Sortie du livre "Introduction à Java"
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
L'histoire de l'écriture de Java dans Emacs
De Java à C et de C à Java dans Android Studio
Résumer le cycle de vie des objets Java à prendre en compte dans le développement Android
Faire correspondre le JSON du cas du serpent au champ du cas du chameau en Java (JVM)
Définir la source de l'ensemble de bibliothèques en tant que dépendance dans IntelliJ en tant que module distinct du projet
[Java] Est-il inutile de vérifier "l'identité" dans l'implémentation de la méthode equals ()?
Branchement conditionnel du résultat de l'instruction SQL pour n'en rechercher qu'une seule en Java
Exemple de code pour obtenir les valeurs de type SQL clés dans Java + MySQL 8.0
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
L'histoire de la fabrication d'un Othello ordinaire à Java
À propos de l'idée des classes anonymes en Java
Présentation de Kotlin à un projet Java Maven existant
L'histoire de l'apprentissage de Java dans la première programmation
Ressentez le passage du temps même à Java
[Java / Kotlin] Redimensionner en tenant compte de l'orientation de l'image
Comment écrire Java String # getBytes dans Kotlin?
Importer des fichiers de la même hiérarchie en Java
Java Bienvenue dans le marais des tableaux bidimensionnels
Comment écrire un exemple d'implémentation du problème dans E05 (ruby, C11) en temps réel hors ligne
Comment utiliser UsageStatsManager dans Android Studio (Comment vérifier l'heure de démarrage d'autres applications)
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
La partie à laquelle j'étais accro dans "Introduction à Ajax dans les applications Web Java" de NetBeans
[Java] Comment afficher les jours acquis par LocalDate et DateTimeformatter en japonais
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
[Java] Comment obtenir l'URL de la source de transition
Obtenez l'URL de la destination de la redirection HTTP en Java
[Java] Déclarons les variables utilisées dans la boucle dans la boucle [Variations dans le bloc]
[Java] Comment omettre le constructeur privé dans Lombok
CI l'architecture des applications Java / Kotlin avec ArchUnit
Comment écrire Scala du point de vue de Java
Veuillez noter la division (division) de java kotlin Int et Int
Quel est le meilleur, Kotlin ou futur Java?
Parcourir les objets de classe dans Kotlin (au lieu de Java class name.class)
[Java] Comment obtenir la valeur maximale de HashMap
Source utilisée pour obtenir l'URL de la source de redirection en Java
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
Comment définir BuildConfig du projet de bibliothèque (module) sur Debug
Modifier la qualité de stockage des images JPEG en Java
Résumé de la mise en œuvre des arguments par défaut en Java
Java: utilisez Stream pour trier le contenu d'une collection
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
Récapitulez les éléments supplémentaires de la classe Optional dans Java 9