Android NDK 学习笔记

NDK官网:https://developer.android.google.cn/ndk/index.html

NDK下载地址:https://developer.android.google.cn/ndk/downloads/

NDK in Github: https://github.com/googlesamples/android-ndk

NDK相关文章

1.Android JNI(一)——NDK与JNI基础

    1.2 Android JNI学习(二)——实战JNI之“hello world”

    1.3 Android JNI学习(三)——Java与Native相互调用

    1.4 Android JNI学习(四)——JNI的常用方法的中文API

    1.5 Android JNI学习(五)——Demo演示

 2. Android NDK 从入门到精通(汇总篇)

实际遇到的问题:

开发工具:AndroidStudio3.4.2

CMake版本:3.10.2

Studio插件:NDK(版本:20.0),LLDB,CMake

 1. javah 找不到 类文件

     ① 打开 Terminal,执行 cd D:\workspaces\android\Test\NDKDemo2\app\src\main\java\com\chb\ndkdemo2 进入到java文件所在目录;

     ②执行 javac NDKTools.java,生成NDKTools.class。

     ③(重要)NDKTools.class 不能和NDKTools.java在同一目录下,将 NDKTools.class移动到另一个目录下,比如:D:\workspaces\android\Test\NDKDemo2\app\src\main\class\com\chb\ndkdemo2,其中 com\chb\ndkdemo2 为NDKTools.java 所在的包名对应的路径,不能修改!

     ④ Terminal 切换到 main文件夹(即class文件夹的上一级)下,执行 javah -classpath class com.chb.ndkdemo2.NDKTools   或者 在任意目录下执行     javah  -classpath  D:\workspaces\android\Test\NDKDemo2\app\src\main\class  com.chb.ndkdemo2.NDKTools   ,生成的 com_chb_ndkdemo2_NDKTools.h 文件在执行 javah命令时所在的目录。

     ⑤ 指定 .h文件生成路径,使用javah -d 路径

          如:  javah  -d  D:\workspaces\android\Test\NDKDemo2\app\src\main\jni -classpath  D:\workspaces\android\Test\NDKDemo2\app\src\main\class  com.chb.ndkdemo2.NDKTools 或者  当你在java文件夹目录下,使用 javah  -d  ../jni  -classpath  D:\workspaces\android\Test\NDKDemo2\app\src\main\class  com.chb.ndkdemo2.NDKTools 将在java的上级目录main下面的jni文件夹生成 com_chb_ndkdemo2_NDKTools.h文件,

 Tips:配置javah快捷键:

    配置 Anroid Studio 外部工具,一劳永逸,往后无需命令行,File->Setting->Tools->External Tools->“+”进入页面

å¨è¿éæå¥å¾çæè¿°

 

Program:$JDKPath$\bin\javah.exe

Arguments:-classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$

Working directory:$ModuleFileDir$\src\main\Java

注释:
-classpath classes 指明类所在的位置

-jni com.jni.jnitest.JNITest 类的绝对路径

-d 产生的.h文件放到指定目录下;
开始生成.h文件,选中JNI类右键->New->External Tools->javah,如图

å¨è¿éæå¥å¾çæè¿°

 

2. 修改so存放路径

   默认路径为:app\build\intermediates\cmake\debug\obj,按照网上提供的方法:#设置生成的so动态库最后输出的路径
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../app/src/main/jniLibs/${ANDROID_ABI}),会报错:More than one file was found with OS independent path 'lib/arm64-v8a/libtwo-lib.so  暂时没找到别的办法修改,只能作罢。

Android NDK 学习笔记_第1张图片

Android NDK 学习笔记_第2张图片

Android NDK 学习笔记_第3张图片

3.CMakeList添加子路径 

    Android NDK 学习笔记_第4张图片

Android NDK 学习笔记_第5张图片

Android NDK 学习笔记_第6张图片

Android NDK 学习笔记_第7张图片

4. 选择编译平台

  可选:arm64-v8a,armeabi-v7a,x86,x86_64

  例如:

  Android NDK 学习笔记_第8张图片

你可能感兴趣的:(Android)