7.5 源码讲解
dlopen 打开动态库
dlsym 找到符号
(*print_func)(); 调用方法
我们可以看到,要使用一个 so 库的某个方法,就上面三步骤,加载 ,查找 ,使用 。我
们这里调用了 so 库中的 my_print 方法。
7.6 运行
我们把 D:\android-ndk-r19c\hello-so\libs\armeabi-v7a 的 libhello-so.so 放到手机的
/system/lib/。把 hello-exe 放到手机的 /system/bin/。 运行 hello-exe 可以看到打印结果
Hello JNI !
为什么要放置 libhello-so.so 到 /system/lib/ 目录呢? 因为,这个是 Android 上给配置的
默认 so 库搜索路径。 具体 adb 连上手机 ,使用 export 看所有系统环境,使用 echo
$PATH 看设置的路径。 Android Studio 写个 hello from C++
8.1 环境搭建
Android Studio 是开发 Android 应用程序的官方 IDE。 关于它的安装,使
用 https://www.runoob.com/android/android-studio-install.html
在安装好 Android Studio 后,打开 IDE ,依次点击 File | Settings | Appearance & Behavior |
System Settings | Android SDK 选择 SDK Tools ,勾选 CMake ,LLDB 和 NDK(想选择更详细
的,勾选右下角的 Show package Details), 等待更新完成。
CMake 是编写编译规则的,NDK 是开发需要的库,编译工具,LLDB 是为了调试用的。
8.2 hello from C++ 代码
打开 Android Studio,File | New | New Project 填写基础信息,然后勾选 Include C++ support 一路下去,便会生成一个带着默认配置好的带着 C++ 代码的工程。
我们直接用这个 Demo 工程讲解即可。
8.3 编译应用,运行看效果
目录解析
9.1 hellojni\app\src\main 主要目录
cpp 目录放置 native 代码
java 放置 Java 代码
res 放置资源
9.2 hellojni\app\libs 放置库文件
如果有三方编好的库,放置到这里,然后在工程对应模块 build.gradle 下使用sourceSets {
main {
jniLibs.srcDirs = [‘libs’]
}
}
配置上去。
9.3 hellojni\app\build 编译过程以及结果
generated 生成目录
intermediates 编译中间过程
outputs 输出内容
其中:
intermediates\cmake\debug\obj\arm64-v8a 这里面的带调试信息
build\intermediates 里面内容细细看,这里面有很多编译过程输出,可以详细阅读。
.externalNativeBuild 本地代码编译,我们的本地代码编译过程,就在这里面输出的。
CMakeCache.txt 规则定义
9.4 rules.ninja 生成的编译命令
一条条的具体执行的命令,通过这个,可以看到每种类别的文件是通过什么命令出来的。想
学习,阅读编译具体参数的,可以阅读这个文件。
这里贴
这里出来的是一条条规则,有注释和执行命令。我们想看具体某个文件怎么编译的,可以从
这里找到信息。
9.5 build.ninja 编译脚本
这里可以看到生成出来的命令,编译规则,工程的 CMake 生成的。不知道大家写过 Makefile
文件没?那个是人工手动在写,时代发展,就变成我们只给下简单配置,就可以自动出来编
译文档。