前言
我在52破解学习的时候发现《教我兄弟学Android逆向06》第六章的so编写到NDK那一步死活走不下去了,找不到生成文件,然后从网上找了一些资料加自己的汇总写了此篇文章
环境
- Android studio :4.1.1
- NDK (Side by side) 23.0.7123448 (ndk;23.0.7123448)
- CMake 3.18.1 (cmake;3.18.1)
废话少说开始正文
安装NDK和CMake
- 找到Android SDK ,选择SDK Tools选项
-
在选择下方的NDK和CMake,点击确定
image.png
准备已经开始,接下来就是磕代码了
创建项目
-
创建项目后把右上角的标签转换为项目标签
image.png -
在main下创建一个新的文件夹:cpp,用于存放C++的代码
image.png -
在cpp文件下创建一个main.c的文件
image.png -
还得再cpp下再创建一个CMakeLists.txt
image.png -
复制CMakeLists.txt的绝对路径
image.png -
右击cpp文件选择Link C++。。。。
image.png 将刚才复制的路径填写进去 project path中
打开CMakeLists.txt,把这几行代码复制进去
cmake_minimum_required(VERSION 3.4.1)
add_library(
# Specifies the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
main.c)
其中,cmake_minimum_required是指cmake的最小版本,add_library中分别声明了库名,静态/动态,编译所需的文件。如果需要编译多个库,那么直接添加多个add_library配置段即可。
完成后点击sync,我的已经点过了所以是不能点的
![](https://i-blog.csdnimg.cn/blog_migrate/a9f841d616210d65b302459b5fcbb9a3.png)
image.png
编写代码
回到MainActivity中开始写咱们的代码
![](https://i-blog.csdnimg.cn/blog_migrate/474003383eace4ec62cf6e754699ff82.png)
image.png
回到刚才的main.c
#include <jni.h>
JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_stringFromJNI(JNIEnv *env, jobject thiz) {
return (*env)->NewStringUTF(env, "hello");
}
运行搞定
![](https://i-blog.csdnimg.cn/blog_migrate/f302aebe2efb035dda63163bbf735981.png)
image.png