Siehe C ++ im Android Studio-Modul (Java / Kotlin)

Das Erstellen einer Bibliothek (AAR-Format) unter Android erfolgt durch Erstellen eines Moduls. Die C ++ - Quellreferenz im Modul ist jedoch problematisch, daher werde ich die Prozedur verlassen. ■ Setp1: Erstellen Sie ein Projekt

2019-05-29 (11).png Erstellen Sie ein Projekt mit "Datei", "Neu" und "Neues Projekt". 2019-05-29 (12).png Weil es C ++ verwendet. Wählen Sie "Native C ++" und klicken Sie auf "Weiter". 2019-05-29 (13).png Diesmal lautet der Name "Test02" Speicherort spezifiziert das zu entwickelnde Verzeichnis Die Sprache wird diesmal in Java eingestellt (Kotlin ist in Ordnung) und dann auf "Weiter". 2019-05-29 (14).png Danach einfach "Fertig stellen" 2019-05-29 (15).png Wenn Sie diesen Bildschirm sehen, können Sie ein Projekt erstellen.

■ Setp2; Modulerstellung

2019-05-29 (17).png Fügen Sie das Modul dem von Setp1 erstellten Projekt hinzu. Wählen Sie "Datei" "Neu" "Neues Modil". 2019-05-29 (18).png Wählen Sie dieses Mal "Android Library" und klicken Sie auf "Next". 2019-05-29 (19).png Der Name der Anwendung / Bibliothek lautet diesmal "test02module". Wenn Sie auf "Fertig stellen" klicken 2019-05-29 (20).png Es sieht so aus und Sie können sehen, dass "test02module" zum Projekt hinzugefügt wurde.

■ Setp3: C ++ - Quelle zum Modul hinzugefügt.

Erstellen Sie zunächst ein Verzeichnis, um die C ++ - Quelle abzulegen. [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);
};

Bearbeiten Sie nach dem Hinzufügen dieser drei Dateien build.gradle (Modul: test02module). 2019-05-29 (21).png

build.gradle


android {
   :
   :
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }
}

Hinzufügen. Sobald Sie mit diesem synchronisieren 2019-05-29 (23).png Sie können sehen, dass die Datei zum Modul hinzugefügt wurde.

■ Setp4: Rufen Sie Modul C von App C aus auf.

Bearbeiten Sie build.gradle (Modul: App) auf der App-Seite. 2019-05-29 (27).png

android {
  :
  :
    sourceSets {
        main {
            jniLibs.srcDir '../test02module/src/lib'
            jni.srcDirs = []
        }
    }
}

Jetzt können Sie die C ++ - Bibliothek so durchsuchen. Bearbeiten Sie "CMakeKists.txt" auf der App-Seite. 2019-05-29 (28).png

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})

Jetzt können Sie sich darauf beziehen. C Quelle der App 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());
}

Sie können darauf unter verweisen.

■ Schritt 5: Kompilierungsfehler

Wenn Sie es so kompilieren, wie es ist, kann ein Fehler auftreten. Weil möglicherweise keine solche Datei erstellt wurde 2019-05-29 (26).png Wenn Sie "Build" auswählen, nachdem Sie "test02 modile" ausgewählt haben, wird "Make Moduke'test02module" angezeigt. Wenn Sie es also ausführen und dann die App ausführen, gibt es kein Problem.

Recommended Posts

Siehe C ++ im Android Studio-Modul (Java / Kotlin)
Von Java nach C und von C nach Java in Android Studio
AndroidStudio Verweisen wir auf C ++ im Modul anderer Projekte (Java / Kotlin).
3 Möglichkeiten zum Importieren von Bibliotheken in Android Studio
[Android Studio] [Java] So fixieren Sie den Bildschirm vertikal
[Android, Java] Praktische Methode zur Berechnung der Differenz in Tagen
[Android Studio] Ich möchte Einschränkungen für die in EditText [Java] registrierten Werte festlegen.
[Android] Konvertieren Sie Android Java-Code in Kotlin
Quelle zur Anzeige des Zeichenarrays mit numberPicker in Android Studio (Java)
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
Java-Referenz zum Verständnis in der Abbildung
Konvertieren Sie alle Android-Apps (Java) in Kotlin
So erhalten Sie das Datum mit Java
Verwendung von ExpandableListView in Android Studio
Verwenden Sie das in Android Studio verwendete JDK im Terminal
Wie schreibe ich Java String # getBytes in Kotlin?
Fassen Sie den Lebenszyklus von Java-Objekten zusammen, die bei der Android-Entwicklung berücksichtigt werden müssen
Eindrücke und Zweifel an der erstmaligen Verwendung von Java in Android Studio
Ich bin auf die Java-Version in Android Studio gestoßen, daher werde ich sie zusammenfassen
Hinweise zu Android Studio
[Android Studio] So ändern Sie TextView in eine beliebige Schriftart [Java]
[Java] So lassen Sie den privaten Konstruktor in Lombok weg
Was ist besser, Kotlin oder zukünftiges Java?
Java-Sprache aus der Sicht von Kotlin und C #
Quelle zum Abrufen der Umleitungsquell-URL in Java
In der Abbildung verstandene Java-Klassen und -Instanzen
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Verwendung von UsageStatsManager in Android Studio (Überprüfen der Startzeit anderer Apps)
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
So machen Sie einen Screenshot mit dem Android Studio-Emulator
Verwenden Sie Java, das in Android Studio enthalten ist, um React Native zu erstellen
Siehe Aufzählung in Thymeleaf
Beispielcode zum Abrufen der Werte der wichtigsten SQL-Typen in Java + Oracle Database 12c
[Java] KClass in Java herunterladen [Kotlin]
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
Sie verwenden derzeit Java 6. Lösung in Android Studio Gradle
Java mit Visual Studio Code
Wenn Sie Java-Bibliothekstests mit Spock in mehreren Modulen mit Gradle in Android Studio 3 implementieren möchten
Implementieren Sie dieselbe Funktion wie das C, C ++ - System ("cls") in Java
So leiten Sie den letzten Tag des Monats in Java ab
Reproduzieren Sie die Java-Enumeration in C #
So wechseln Sie Java in der OpenJDK-Ära auf dem Mac
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
Eingabe in die Java-Konsole
Verwendung der in Kotlins Schnittstelle implementierten Funktion, die in Maven als Standardimplementierung von Java 8 eingeführt wurde
Ich habe versucht, eine einfache Karten-App in Android Studio zu erstellen
[Rails / Routing] So verweisen Sie auf den Controller in Ihrem eigenen Verzeichnis
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Das Problem, dass XML-Attribute in Android Studio willkürlich neu angeordnet werden
[Android, Java] Methode zum Ermitteln des abgelaufenen Datums aus zwei Daten
AtCoder ARC 081 C-Hash, der in Ruby, Perl und Java gelöst werden muss
[Android Studio] Legen Sie ein beliebiges Bild für den Anwendungshintergrund fest. [Java]
Die in /lib/calendars.properties von Java jre festgelegte Millisekunde ist UTC
[Android / Java] Verstehen Sie den Beschreibungstyp in den Listener-Einstellungen (Schaltflächeninstallation).
Beurteilen Sie, ob die zu vergleichenden Zeichenfolgen in Java identisch sind
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Beispielcode zum Aufrufen der Yahoo! Local Search API in Java
So beheben Sie den unbekannten Fehler, der bei der Verwendung von slf4j in Java aufgetreten ist
kotlin & Java: So blenden Sie die Symbolleiste nur für bestimmte Fragmente aus
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen
So ermitteln Sie die Länge einer Audiodatei mit Java