需要学习逆向可以联系QQ1847076032
QQ群602903341
-
如何编译原生程序
Application.mk(ARM硬件指令集/工程编译脚本/stl支持等)
Android.mk(编译选项/头文件/源文件及依赖库等)
local_path(call my-dir)
include $(clear_vars)
local_arm_mode:= arm指令模式
local_module:=模块名称
local_src_files:=源文件build_executable(可执行文件) build_shared_library(动态链接库) build_static_library(静态链接库))
首先new一个安卓工程
打开mainactivity代码界面:
首先了解JNI
他的作用就是Java和c,c++之间的一个中介
整个过程都是通过反射来完成Java和c之间的互通
Jinni的详解
然后在Java里面写一个特殊方法 被native修饰的
写好了代码,就生成头文件:
复制工程src的路径 cd过去:
然后输入命令:
Javah -jni加类名
回车后刷新工程目录 就多一个.h文件
新建一个文件夹 把刚刚的h文件重命名后移动过去
然后新建一个文件 命名为 .c 如上图
然后在h文件里面有个声明和方法名格式
直接复制到新建的c文件里面
记得复制的时候注意h文件的命名 和你的h文件名一样
复制过去后方法是 ; 结尾的 现在我们要写代码 所以改成 { }
既然声明了返回值类型为string 就要返回 但是不能直接返回字符串 先定义一个返回的方法然后直接返回这个方法名就行
具体定义的格式都有 :
这里是string类型的 有UTF的方法:
复制过去:
然后直接把两个.mk文件复制进去 记得模块名和原文件那里改成自己的文件
然后生成so库
Cd到jni的路径下面
生成的so在这个目录下面:
然后在mainactivity里面加载
OK 完成!