美文网首页
Android NDK Jni学习使用(一)

Android NDK Jni学习使用(一)

作者: 翟小乙 | 来源:发表于2022-04-22 14:49 被阅读0次
    jni 编译三种方法
    • 纯源码编译
    • 写头文件,提供.a文件 编译
    • jni中调用so文件 编译
    1. 创建工程
    • 创建一个 JniDemo 项目
    • JniDemo 项目为Navite C++项目
    • 项目目录结构中有cpp文件,CMakeLists.txt


      创建navite.png
    创建项目.png
    2. 配置项目
    • 在local.properties中配置NDK目录
    • 在studio->File->Project Structure->Modules->配置Ndk
    • 若项目中没有NDK需要去下载
    3. 文件结构
    • .cpp 是连接Java代码源文件,对其进行编写
    4.分析
    1.png
    extern "C" JNIEXPORT jstring JNICALL
    Java_com_zyj_jnidemo_MainActivity_stringFromJNI(
            JNIEnv* env,
            jobject /* this */) {
        std::string hello = "Hello from C++";
        return env->NewStringUTF(hello.c_str());
    }
    
    4.1. 函数分析
    • Java :语言
    • com_zyj_jnidemo :对于项目包名
    • MainActivity :类名(注册so文件,引用方法)
    • stringFromJNI :方法名
    • 命名规范就是 Java_包名类名方法名
    4.1.1 在MainActivity 中使用 :(包名是com.zyj.jnidemo)
          static {
              System.loadLibrary("native-lib");
           }
          public native String stringFromJNI();
    
         通过stringFromJNI 获取
    
    4.2. extern "C" 避免编译器按照C++方法编译C函数
    4.3. JNIEXPORT 函数可以被其他函数调用
    4.4. jstring 返回类型
    4.5.设置CMakeLists.txt 生成的so文件路径:
    结果展示.png
          # set(原路径, 目标路径, 生成哪些平台对于的库文件)
          # 参数分析
          # CMAKE_CURRENT_SOURCE_DIR: 这个是cmake的库的原路径
          # /../jniLibs: 这个是指与CMakeList.txt 所在目录的同一级目录
          # ANDROID_ABI:生成哪些平台对应的库文件
          set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})
    
    4.6. 生成指定arm文件
     defaultConfig { 
         externalNativeBuild {
             cmake {
                 cppFlags "-std=c++11"
                 abiFilters "armeabi-v7a"    // 指定只生成armeabi-v7a
             }
         }
     }
    

    相关文章

      网友评论

          本文标题:Android NDK Jni学习使用(一)

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