前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NDK开发_cwin配置+编程简单步骤

NDK开发_cwin配置+编程简单步骤

作者头像
小驰随想录
发布2021-04-30 14:36:39
5060
发布2021-04-30 14:36:39
举报

这个是2019年就在csdn写的文章了,今天整理到公众号上来~

最近在调试 车辆识别demo,说实话,虽然最初接触jni的时候,是在eclipse工程中进行开发的, 不过后面遇到的项目都是直接放到了android 源码中编译的,所以对于在eclipse中的ndk开发,其实记忆有点模糊了,包括 Android.mk的编写,都有点小区别吧。

这里简单记录下,权当简单回顾吧。


一、需要准备和安装 的东东

1)cygwin cygwin还是蛮强大的,相当于是在window环境上,提供了个 unix操作的环境吧。后面在window上编译 so还得靠它;

2)android-ndk-*** ,这个的版本很多,也不清楚目前最新的版本是多少了,不过都没有太大的关系,我使用的 android-ndk-r8b,这个是提供了编译 so需要的工具,而且也提供了些 jni 的sample;

cygwin 的安装就有点坑了,如果是选择 从网络上下载安装,也不清楚是哪个网址能成功下载的,估计得翻墙才行;不过之前安装的时候,的确是选择 网络安装,也能成功安装,只是忘了选择哪个网址了,这次也试了很多了网点,不过不是网速太慢,就是中途有报错了。

所以后面选择的是本地安装了,还好之前安装过一次成功的,这次本地安装完后,直接把之前安装好的 bin目录,直接替换现在安装的bin目录,然后需要安装的一些东西就不会缺少了。

二、cygwin 的简单使用

1)简单映射下硬盘,方便后面的操作,如下图,后面直接 cd win_c,就是切换到 c盘啦

2)配置下 ndk路径,在 .bashrc 中添加 如图所示内容,相应的ndk路径根据自己自己实际情况而定,我这边是直接放在了 d盘

3)配好了环境,当然是需要 source 一下啦

4)完成了上面几步,我们就来看下有没有生效啦,ndk提供的demo就派上用场了,切换到 ndk 的samples目录,我这里测的是hello-jni, 切到hello_jni 目录下后,ndk-build 下。(我这里可能有点问题,虽然install 成功了,后面copy到libs/armeabi的时候出错了,不过这丝毫不影响我们后面实际项目的使用,只要install没报错就ok了)

三、编译 车辆识别项目 jni

前面的工作做好了,现在就可以来编编我们的项目了,切到项目工程 的jni目录下(一般jni相关的都放在了jni目录下,当然这个目录视自己实际情况而定),

然后很简单的ndk-build 下下,ok,需要的so 成功生成了,我们可以看到 这时会在工程的 libs/armerbi下生成了我们需要的so。

------- JNI 编程 最最简单步骤 -----------------------------------------------------------------

本地时间 19:02,而且是周六,其实不想写了,不过又想想不能偷懒,所以还是接着简单写下下~

1)javah + native 类路径,生成相应的 .h文件

2)根据 .h 文件,新建对应的 .cpp文件,并实现相应的方法

3)javap -s + native类路径,查看java 方法签名。(个人觉得这个还是挺好用的,不过也只有在 我们的jni需要放到 android 源码中编译的时候,需要写 方法映射 的时候才用的上)

前面说的是调通别人提供的demo,这在将demo的功能移值到实际项目中的时候,还是遇到了点问题。首先就是新建了native 类,重新 生成so的问题。

【遇到的问题】

1、javah +native 类名,提示找不到 类 Bitmap

找不到Bitmap,那就是android.jar 没找到,ok, -classpath 指定下android.jar路径

这时报错 找不到“com.visdom.lprtest.LPR”了,

原来完整的用法应该是如下图所示,除了指定需要的jar,还需要指定当前路径,不过同样的写法在cmd中输入是可以的,在cygwin中就报错了,原因不详。

不过这样能生成 .h就可以了,不影响下一步的进行了。(这里得说明下,如果写的native方法,不需要import其他类的话,直接 javah + native类就可以生成 .h了)

下面再相对应的修改下 jni目录下的Android.mk 需要编译的文件,就可以在cygwin中切到该jni目录下,ndk-build了

好了,下面就可以看到在armeabi目录下生成我们需要的libLPRJNI.so了

2、安装apk后,切到 data/data/包名/libs 目录下,发现没有 .so文件???

这个问题就得说下 adb push 和 adb install 的区别了,如果直接adb push 到安装目录的话,libs目录下是不会有so文件的,如果是 adb install的话,则是有的。

而我调试的,因为签名关系,只能采用 adb push的方式,这种情况下,需要加载的so就需要手动的push 到system/lib目录下了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小驰成长圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、需要准备和安装 的东东
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档