android r 编译找不到头文件_逆向基础十四:移植Linux标准动态库移到Android

移植Linux标准动态库到Android,有两种方法,一种是利用编译工具链,将Linux标准动态库源码编译成so,放入Android工程的jniLibs对应的CPU目录下。另外一种方法是,提取标准动态库的c和h文件,放入Android工程的jni目录下,利用Android Studio下Ndk-build,在build目录下生成so,最终将其拷贝到jniLibs对应的CPU目录下。

下面讲解移植Linux Pcap库(libpcap-1.9.0.tar.gz),并在Android工程上对此进行验证。

我们采用第一种方法,即使用编译工具链。

第一步,我们先在Linux环境上安装Android NDK,然后设置如下环境变量。

b195f881fcc960c618862752a172ecae.png

第二步,执行“./configure  --host=aarch64-linux-android”生成Makefile文件。

bc535f9dcddfa3b20ded0b8edd3ac7df.png

第三步,编写JNI接口,即在libpcap-1.9.0目录下新建androidpcap.c实现JNI接口。我们可以把pcap.c的头文件部分全部拷贝过来,然后包含jni.h头文件,我们沿用之前搭建NDK的环境,我们在

Java_com_example_ndktest_MainActivity_stringFromJNI

函数内调用pcap_findalldevs接口,返回相应的结果。

需要注意PCAP_API声明,没有这个宏,该函数则会编译生成local函数,只有加了PCAP_API,最终动态库中这个函数才能被其他文件调用。

3da91f6cc18a75186ac0d6f69be7d89c.png

第四步,修改Makefile,保证能编译到新增JNI接口对应的文件,主要修改如下三点。

1b516691aca5aef5e9335804de39fab6.png

78af34aa234f94d458942561956b6c63.png

655b1663eff886f64111bf89932c044f.png

第五步,最后我们执行make,生成对应的so文件libpcap.so.1.9.0,重命名后将so拷贝到jniLibs目录下。

关于如何验证这个so,我们仍然利用之前搭建的Android NDK开发环境,Android 工程代码保持不变,修改stringFromJNI的入参wlan0,核心代码如下所示。

fc7cc78812d057245f871cf5d12bb338.png

将最终的APK安装到Android手机,测试结果如下所示,该结果表明Linux动态库移植到Android方法是正确的,至于为什么Native层调用pcap的接口返回错误,可以作后续思考。

06f5bf88ea3796a97d8eb54dc5a687a2.png

欢迎扫码关注,一起学习

b549780ddf4b822c88aa307fa22d6ae8.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值