From 85944ed6ce244d54344732fb9328f3c8ba9bacec Mon Sep 17 00:00:00 2001 From: FHT <981964879@qq.com> Date: Thu, 8 Apr 2021 18:20:51 +0800 Subject: [PATCH] 2021.04.08 cmake --- app/CMakeLists.txt | 44 +++++++++++++++++++ app/build.gradle | 16 ++++--- app/src/main/cpp/native-lib.cpp | 15 +++++++ .../java/com/tt/ttutils/jni/NDKTools.java | 3 +- 4 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 app/CMakeLists.txt create mode 100644 app/src/main/cpp/native-lib.cpp diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt new file mode 100644 index 0000000..8199d50 --- /dev/null +++ b/app/CMakeLists.txt @@ -0,0 +1,44 @@ +# 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). + src/main/cpp/native-lib.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 ) + +# 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 + + # Links the target library to the log library + # included in the NDK. + ${log-lib} ) \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 326b757..251d795 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,6 +36,12 @@ android { ] } + externalNativeBuild { + cmake { + path 'CMakeLists.txt' + } + } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 @@ -103,11 +109,11 @@ android { } buildTypes { - externalNativeBuild { - ndkBuild { - path 'src/main/jni/Android.mk' - } - } +// externalNativeBuild { +// ndkBuild { +// path 'src/main/jni/Android.mk' +// } +// } sourceSets.main { jni.srcDirs = [] jniLibs.srcDirs = ['src/main/jniLibs'] diff --git a/app/src/main/cpp/native-lib.cpp b/app/src/main/cpp/native-lib.cpp new file mode 100644 index 0000000..cbe9cac --- /dev/null +++ b/app/src/main/cpp/native-lib.cpp @@ -0,0 +1,15 @@ +// +// Created by Administrator on 2021/4/8. +// +#include +#include + +extern "C" +JNIEXPORT jstring + +JNICALL +Java_com_tt_ttutils_jni_NDKTools_getStringFromNDK( + JNIEnv *env, jobject /* this */) { + std::string hello = "Hello from C++"; + return env->NewStringUTF(hello.c_str()); +} diff --git a/app/src/main/java/com/tt/ttutils/jni/NDKTools.java b/app/src/main/java/com/tt/ttutils/jni/NDKTools.java index a3476e3..ffd6578 100644 --- a/app/src/main/java/com/tt/ttutils/jni/NDKTools.java +++ b/app/src/main/java/com/tt/ttutils/jni/NDKTools.java @@ -2,7 +2,8 @@ package com.tt.ttutils.jni; public class NDKTools { static { - System.loadLibrary("NDKTools-jni"); +// System.loadLibrary("NDKTools-jni"); + System.loadLibrary("native-lib"); } public static native String getStringFromNDK();