美文网首页
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