好友
阅读权限10
听众
最后登录1970-1-1
|
最近在跟随 会飞的小丑鸭 的《教我兄弟学逆向..》系列贴学习逆向,在《教我兄弟学Android逆向06 用AndroidStudio编写第一个so》 一帖中,按照帖子所教内容成功编译出so文件,但在 "课后作业" 时,编译时缺出现了一系列问题,导致最后没有成功,查看下面大家的一些评论,看到了一些为了跟随学习,又选择了低版本的AS,也看到了一些评论说gradle3.0以上放弃了帖中的生成方法,于是,我开始了解决AS3.X 以上版本编写so的问题,最后终于成功,现将中间解决时出现的问题写出来希望能够帮助大家
此帖是在 《教我兄弟学Android逆向06 用AndroidStudio编写第一个so》基础上编写,一些简单配置地方可能会省略,尽可能的做到详细说明
NDK
- 下载好NDK,并配置好环境变量,AndroidStudio中并也配置好。(此处无需使用教学帖中 NDK-r10版本,使用这个r10低版本会有问题,并提示需要"rxx"版本以上,此处本人以最新的r20版本为例进行编写)
AndroidStudio编写so
-
编写JNI接口类
-
找到JNI接口类文件路径,在此处调用cmd窗口(个人习惯,亦可在AS的命令行窗口进行,不过需要在当前类的路径下)生成 .class文件
-
返回到"java"目录下,调用cmd窗口,使用命令 "javah -jni 包名.类名" 生成.h文件。注意一定要在java层目录下输入命令,不然不会报错:找不到xxx类
-
创建 jni 文件夹,并将.h文件移动到此文件夹下。然后创建一个空的c文件,并对其编写。编写内容:将.h文件中 两个方法相关的代码复制到c文件中,头部引用.h文件
-
下载CMake和LLDB。(需要注意:CMake 不可下载 3.10.版本 需要下载3.6.版本,不然会报错,具体 查看/下载 ‘点击AS-SDKManager - 右下角 showPackageDetails -查看CMake’)
-
下载好后 在项目的build.gradle下进行相关配置
// 使用Cmake工具
externalNativeBuild {
cmake {
cppFlags ""
//生成多个版本的so文件
abiFilters 'arm64-v8a','armeabi-v7a','x86','x86_64'
}
}
// 配置CMakeLists.txt路径
externalNativeBuild {
cmake {
path "CMakeLists.txt" // 设置所要编写的c源码位置,以及编译后so文件的名字
}
}
- 关于 CMakeLists.txt 如何得来的,可以自己在新建项目的时候 勾选“Include c/c++” 生成的项目就有此文件。
-
修改 CMakeLists.txt 内容
-
编译 点击"Build - Rebuild Project",编译后在 "app - build - intermediates - cmake - debug - obj "下查看so库
-
项目创建jniLibs并调用so库方法
- 如果想指定jniLibs文件路径可以在app - build.gradle 下配置:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
最后
- 需要注意:
- .h文件要移动到 jni文件夹下
- CMake下载注意版本
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|