Créez un projet avec "Fichier", "Nouveau" et "Nouveau projet". Parce qu'il utilise C ++. Sélectionnez "Native C ++" et appuyez sur "Suivant". Cette fois, le nom est "Test02" Save Location spécifie le répertoire à développer La langue est définie en Java cette fois (Kotlin est ok) puis "Next" Après cela, il suffit de "Terminer" Si vous voyez cet écran, vous pouvez créer un projet.
Ajoutez le module au projet créé par Setp1. Sélectionnez "Fichier" "Nouveau" "Nouveau module". Cette fois, sélectionnez "Bibliothèque Android" et cliquez sur "Suivant" Le nom de l'application / bibliothèque est "test02module" cette fois. Si vous appuyez sur "Terminer" Cela ressemble à ceci, et vous pouvez voir que "test02module" a été ajouté au projet.
Commencez par créer un répertoire pour placer la source C ++. [test02] +---[test02modile] +---[src] +---[main]
CMakeList.txt
# 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-module
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
subTest.cpp)
# 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)
set( LIB_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../.. )
set( OUTPUT_DIR ${LIB_ROOT}/lib/${ANDROID_ABI} )
set_target_properties( native-module
PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIR} )
# 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-module
# Links the target library to the log library
# included in the NDK.
${log-lib})
subTest.cpp
#include "subTest.h"
subTest::subTest() {
}
void subTest::Hoge(int in_no) {
int a = in_no;
}
subTest.h
#pragma once
class subTest{
public:
subTest();
public:
void Hoge(int in_no);
};
Après avoir ajouté ces trois fichiers, éditez build.gradle (Module: test02module).
build.gradle
android {
:
:
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
}
}
Ajouter. Une fois que vous avez synchronisé avec cela Vous pouvez voir que le fichier a été ajouté au module.
Modifiez build.gradle (Module: app) du côté de l'application.
android {
:
:
sourceSets {
main {
jniLibs.srcDir '../test02module/src/lib'
jni.srcDirs = []
}
}
}
Vous pouvez maintenant parcourir la bibliothèque C ++ ainsi file. Modifiez "CMakeKists.txt" du côté application.
CMakeKists.txt
# 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(../../../../test02module/src/main/cpp)
add_library( native-module
SHARED
IMPORTED )
set_target_properties( native-module
PROPERTIES IMPORTED_LOCATION
../../../../../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})
Vous pouvez maintenant vous y référer. C source de l'application native-lib.cpp
native-lib.cpp
#include <jni.h>
#include <string>
#include "subTest.h"
extern "C" JNIEXPORT jstring JNICALL
Java_l_toox_test02_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
subTest ss;
ss.Hoge(32);
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
Vous pouvez vous y référer à.
Si vous le compilez tel quel, une erreur peut se produire. Parce qu'il n'y a peut-être pas de fichier SO créé Si vous sélectionnez "Build" après avoir sélectionné "test02 modile", "Make Moduke'test02module '" apparaîtra, donc si vous l'exécutez puis exécutez l'application, il n'y a pas de problème.
Recommended Posts