瑞芯微Rockchip开发者社区
登录
直播中
七上八下
8年用户
827经验值
私信
关注
[问答]
怎样新建一个简单的demo进而实现so库的生成和调用呢
开启该帖子的消息推送
RK3288
怎样新建一个简单的demo进而实现so库的生成和调用呢?有哪些实现步骤?
回帖
(1)
杜元晓
2022-3-3 15:16:34
配置好JNI后我们来新建一个简单的demo,实现so库的生成和调用。
我们先新建一个demo。
打开Android stdio然后新建一个空白demo
然后设置这个demo的存储路径,注意语言要选择java。不要用推荐的kt。
完成后就进入Android stdio的编码界面了。然后右键app,new一个jni的文件夹。
直接点Finish。这个时候 这个JNI文件夹就出来了。如下图:
接下来我们需要在mainActivity中新建一个类,用来衔接Java和C语言。如下图
在弹出的对话框中声明我们要新建的类名。
完成后点击OK。
到这里我们才完成一半的工作。
我们找到我们刚才添加的类。在右边写上下面的代码。
1 用来加载我们生辰的so库。
2 我们随便写的一个用来测试的函数。
这个时候会提示我们GBK不认识。那么我们设置一下UTF-8就好了。
具体做法如下: -encoding UTF-8 这句话放到下图的地方。这句话一定要紧跟jni目录后面,位置一定不能错。
注意一定不要点开黄色的两个箭头添加,会出错。
到这里给我们的jniInterface class添加头文件。
如下图:右键jniInterface选择javah
这个时候打开jni文件夹能看到我们添加的头文件。
接下来我们找到这个头文件的存储目录,并添加三个文件。如下图:
在这个文件中添加如图三个文件,名字分别为:Android.mk Application.mk JNI.cpp
然后再这三个文件中添加源码。
Android.mk 源码:
LOCAL_PATH := $(call my-dir) #获取Android.mk所在目录
include $(CLEAR_VARS)
# 下面一句是用来指定so库生成位置的,感兴趣的朋友可以试试,确实可以改变so库生成位置。
# NDK_APP_DST_DIR=../../../../../SharedLibs/$(TARGET_ARCH_ABI)
LOCAL_MODULE := jniTest #指定生成so库的名称
LOCAL_SRC_FILES := JNI.cpp #指定生成so库所需源码文件
include $(BUILD_SHARED_LIBRARY) #说明生成的是动态so库(这句是废话)
Application.mk 源码:
# APP_ABI :=armeabi armeabi-v7a mips x86
APP_ABI :=armeabi-v7a #指定生成的so库适用的cpu架构,这个是最常见的一种。
JNI.cpp 源码:
#include"com_example_myapplication_jniInterface.h"
JNIEXPORT jstring JNICALL Java_com_example_myapplication_jniInterface_tw_1jniTest
(JNIEnv *env, jobject obj)
{
return env->NewStringUTF("TERAWINS");
}
到这里jni设置差不多就完成了,我们现在需要用ndk-build来编译一下我们刚才设置的jni,生成so库。如下图
右键jni文件夹->NDK->ndk-build
这个时候可以发现,main目录下面多了libs和obj。
下图红框就是我们生成的so库。
做到这里我们编译一下,发现没有错误。接着往下走。
我们找到layout->activity_main.xml 然后给我们的textView加个句柄。如下图:
找到mainActivity,添加如下图内容:
1 找到mainActivity文件
2 导入TextView包
3 先声明一个TextView tv 实例指向空。
4 让tv 指向我们上一步设置的TW句柄。
5 把我们用jni设置的返回字符串在tv指向的TextView中显示出来。
这个时候编译可以过但是app不能正常运行。
因为还有一个地方要设置:
在build.gradle中加入上图中红框的内容。屏蔽默认的库调用路径,使用我们刚生成的so库的调用路径。
为了设置so库调用路径。
最后设置成功,点击run.
app在我们的RK3288上面跑起来,效果如下图:
配置好JNI后我们来新建一个简单的demo,实现so库的生成和调用。
我们先新建一个demo。
打开Android stdio然后新建一个空白demo
然后设置这个demo的存储路径,注意语言要选择java。不要用推荐的kt。
完成后就进入Android stdio的编码界面了。然后右键app,new一个jni的文件夹。
直接点Finish。这个时候 这个JNI文件夹就出来了。如下图:
接下来我们需要在mainActivity中新建一个类,用来衔接Java和C语言。如下图
在弹出的对话框中声明我们要新建的类名。
完成后点击OK。
到这里我们才完成一半的工作。
我们找到我们刚才添加的类。在右边写上下面的代码。
1 用来加载我们生辰的so库。
2 我们随便写的一个用来测试的函数。
这个时候会提示我们GBK不认识。那么我们设置一下UTF-8就好了。
具体做法如下: -encoding UTF-8 这句话放到下图的地方。这句话一定要紧跟jni目录后面,位置一定不能错。
注意一定不要点开黄色的两个箭头添加,会出错。
到这里给我们的jniInterface class添加头文件。
如下图:右键jniInterface选择javah
这个时候打开jni文件夹能看到我们添加的头文件。
接下来我们找到这个头文件的存储目录,并添加三个文件。如下图:
在这个文件中添加如图三个文件,名字分别为:Android.mk Application.mk JNI.cpp
然后再这三个文件中添加源码。
Android.mk 源码:
LOCAL_PATH := $(call my-dir) #获取Android.mk所在目录
include $(CLEAR_VARS)
# 下面一句是用来指定so库生成位置的,感兴趣的朋友可以试试,确实可以改变so库生成位置。
# NDK_APP_DST_DIR=../../../../../SharedLibs/$(TARGET_ARCH_ABI)
LOCAL_MODULE := jniTest #指定生成so库的名称
LOCAL_SRC_FILES := JNI.cpp #指定生成so库所需源码文件
include $(BUILD_SHARED_LIBRARY) #说明生成的是动态so库(这句是废话)
Application.mk 源码:
# APP_ABI :=armeabi armeabi-v7a mips x86
APP_ABI :=armeabi-v7a #指定生成的so库适用的cpu架构,这个是最常见的一种。
JNI.cpp 源码:
#include"com_example_myapplication_jniInterface.h"
JNIEXPORT jstring JNICALL Java_com_example_myapplication_jniInterface_tw_1jniTest
(JNIEnv *env, jobject obj)
{
return env->NewStringUTF("TERAWINS");
}
到这里jni设置差不多就完成了,我们现在需要用ndk-build来编译一下我们刚才设置的jni,生成so库。如下图
右键jni文件夹->NDK->ndk-build
这个时候可以发现,main目录下面多了libs和obj。
下图红框就是我们生成的so库。
做到这里我们编译一下,发现没有错误。接着往下走。
我们找到layout->activity_main.xml 然后给我们的textView加个句柄。如下图:
找到mainActivity,添加如下图内容:
1 找到mainActivity文件
2 导入TextView包
3 先声明一个TextView tv 实例指向空。
4 让tv 指向我们上一步设置的TW句柄。
5 把我们用jni设置的返回字符串在tv指向的TextView中显示出来。
这个时候编译可以过但是app不能正常运行。
因为还有一个地方要设置:
在build.gradle中加入上图中红框的内容。屏蔽默认的库调用路径,使用我们刚生成的so库的调用路径。
为了设置so库调用路径。
最后设置成功,点击run.
app在我们的RK3288上面跑起来,效果如下图:
举报
更多回帖
rotate(-90deg);
回复
相关问答
RK3288
怎样
去
调用
一
个
第三方的驱动
库
呢
2022-03-04
1198
怎样
去
新建
一
个
STM32标准外设
库
呢
2021-10-29
1566
怎样
去
新建
一
个
STM32F030标准
库
模板
呢
?
2021-10-15
1726
ccs
生成
静态
库
只用新的
库
文件不行吗
2019-05-28
1623
openharmony 能否
调用
三方
so
库
2022-12-05
1434
怎样
去
新建
一
种基于ST官方固件
库
的STM32F407工程
呢
2021-10-25
1016
如何
新建
一
个
基于固件
库
的工程模板?
2021-11-30
730
HAL
库
是如何
实现
ADC从而去模拟看门狗的
2021-08-20
1948
怎样
在KEIL C51软件上去
新建
一
个
工程
呢
2021-10-19
1305
怎样
通过Arduino Uno去
实现
简单
的正反转
demo
?
2021-06-29
1805
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分