学习JNI记录

Posted wzj_what_why_how

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习JNI记录相关的知识,希望对你有一定的参考价值。

这是我在学习写jni和使用自己写的jni demo 的项目:
https://gitee.com/wzj1157362131/jni_knowledge_pooling.git

总共分了三个分支:

  • master:放在最初的demo
  • dev_note:做一些知识点做了注释说明和一些使用上的补充
  • dev_arr:这个是用来打包成arr文件供其他项目进行调用的

遇到的问题
在使用自己打得arr包到其他项目的时候,出现了这个问题(这个问题其实算不是跟jni的问题,应该是属于module开发的问题哈哈哈):

定位到问题的原因是:

 	<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.JniApplication">
        <activity android:name=".JniMainActivity"></activity>
	</application>

原因分析:这是Manifest合并冲突的错误,当低优先级的清单文件属性合并到高优先级中,假如高优先级中没有对应的属性,则直接合并,假如有并且不一样,这时候就有了冲突。
因此,去掉之后重新rebuild project,问题解决。


遇到的问题:

No version of NDK matched the requested version 21.0.6113669

这个问题是因为NDK版本引起的同步报错。
最全解决办法: No version of NDK matched the requested version 20.0.5594570

用您要使用的NDK版本替换双引号之间的字符串

android {
    ndkVersion "21.4.7075529"
}

问题修复。


调用之前,注意要做加载NDK的操作

companion object {
        init {
            //调用.so文件中的C++代码 之前需要加载NDK库
            System.loadLibrary("native-lib")
        }
    }

以上是关于学习JNI记录的主要内容,如果未能解决你的问题,请参考以下文章

Android的JNI调用

Andorid——ubuntu下的 NDK / JNI

JNI学习笔记

python小白学习记录 多线程爬取ts片段

Android-JNI开发系列《十一》实践-利用Android C源码实现GIF图片的播放

我的C/C++语言学习进阶之旅JNI开发之转换C层返回的结构体为Java实体Bean