美文网首页
Android在Module中引入Native C++

Android在Module中引入Native C++

作者: 板栗炖牛肉 | 来源:发表于2021-10-09 10:43 被阅读0次

    前言

    • 在新建的Lib中,As是没有Native C++项目的,需要自己手动建立
    • 此方法在Project中也生效
    • 环境 AS 3.5.2ndk 22.1.7171670 , 23的ndk有问题暂时没用

    解决方案

    • 设置ndk目录


      步骤一
    步骤二
    • AS下载的没有platforms文件夹(没有文件夹,选中目录会报错),新建一个空白文件夹叫此名即可

    • 项目切换到Project模式

      image.png
    • main下新建cpp

      image.png
    • 可以新建一个Native项目,把CMakeLists.txtnative-lib.cpp移动出来,此处方便我直接贴出来

    # 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 )
    
    # 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} )
    
    #include <jni.h>
    #include <string>
    
    extern "C" JNIEXPORT jstring JNICALL
    Java_com_blog_hooklibrary_jni_Query_stringFromJNI(  //改名称
            JNIEnv *env,
            jobject /* this */) {
        std::string hello = "Hello from C++";
        return env->NewStringUTF(hello.c_str());
    }
    
    
    
    • 切回Android文件目录,找到Lib依赖
      image.png
    • android{...}下添加
        externalNativeBuild {
            cmake {
                path "src/main/cpp/CMakeLists.txt"  //根据自己的目录调整
                version "3.10.2"
            }
        }
    
    • java文件
    public class Query {
    
    
        static {
            System.loadLibrary("native-lib");
        }
    
    
    
        public native String stringFromJNI();
    }
    
    
    • 最后,使用此方法


      image.png

    相关文章

      网友评论

          本文标题:Android在Module中引入Native C++

          本文链接:https://www.haomeiwen.com/subject/pdcqoltx.html