Android studio使用JNI实例(2)- 调用外部so库

本文介绍了在Android Studio中调用外部so库的完整流程,包括生成库文件、新建工程、导入so库、调用接口和编译APK。在调试过程中,通过Analyze APK工具查看APK结构,并解决了由于依赖库缺失导致的错误。
摘要由CSDN通过智能技术生成

注意:本人是初学Android开发,Android studio开发环境也是第一次使用,在本文及Android开发系列文章中均为本人个人的见解及网络资料,为自己的学习笔记,同时给初学者提供参考,不正确之处还望包含指正!

前言

本文是在《Android studio使用JNI实例(1)》的基础之上完成的。
外部so库在Java下没办法直接调用(个人意见,至少本人不知道直接调用的办法),所以要使用so库需要添加Java调用接口,即再次将so库的接口封装为Java可以调用的接口,即就是Native方法。

注意:
本文介绍的方法需要将so库封装到APK中,否则无法在调试时运行。
据网上资料介绍,在线调试及ADB调试安装的APK与将APK封装到Android系统镜像中(此时安装系统是会自动安装)这两种方法安装的APK权限不一样。在线调试安装的APK如果依赖so库,就算该so库在系统库(/system/lib路径下)中存在APK也不能直接使用,如果不封装到APK中APK会运行出错(找不到so库文件),应该是Android为了安全而限制的,而封装到Android镜像中的APK可以不用封装so库到APK而直接使用系统库下的so库,本文介绍的使用在线调试,所以使用的将so库封装到APK中,第二种方法在本文中不做介绍,本人目前也没有验证。

调用外部库

本实例的目的是在Android的APK中调用外部so库,其结果与《Android studio使用JNI实例(1)》效果一样,在Android中显示一段字符串,不同的是本例中的字符串来自so库。

生成库文件

首先生成可以在对应平台上运行的so库文件,本文实例运行在全志H6平台,是ARM体系结构,所以需要交叉编译。这些基本的不在赘述,对做Linux开发及嵌入式开发的程序猿都很基础。
本文不介绍生成Android平台so库的方法,也许直接交叉编译生成的库可以使用(本人没验证),为了防止出现不必要的问题,本人在Android源码编译环境中编译so库,此处只贴出库源码,不介绍生成库的方法,可以参考网路上的资料,也可以关注本人博客后期文章,后期本人会整理在Android源码环境下生成so库的方法。
生成名为libhello.so的库文件,其源码(hello.c)如下:

static const char *hello_string = "Hello, I'm library";

const char *hello_hello()
{
    return hello_string;
}

该库只有一个借口函数hello_hello(),其功能是返回存在静态去的字符串“Hello, I’m library”的地址,需要将其显示在屏幕上。

新建工程

由于本例是《Android studio使用JNI实例(1)》的升级,是在此基础上完成调用so库的操作,所以先参考《

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值