频道栏目
首页 > 资讯 > Android > 正文

Android6.0 NDK 和 .So 之间的关系

17-03-01        来源:[db:作者]  
收藏   我要投稿

Android6.0 NDK 和 .So 之间的关系。一直有人来问JNI和so库之间的关系,网上也有很多文章,这里阐述了如何编译过去,并且做了编译时需要注意的相关说明。

还有一点需要特别强调,JNI可以理解为辅助ADC,真正要使用的是编译之后的.so,这里使用的是Android6.0,可以忽略。

jni深圳市米奇云科技有限公司

通过NDK我们可以直接用JNI去动态编译,有2种方法:

我们通过手写的方式写出对应的方法 我们通过javah的命令执行出对应的.h

深圳市米奇云科技有限公司

如何,这里涉及到了Context和Toast,如何直接编译会报错。

这里需要注意2点

javac的是时候要 -cp 带上android.jar的路径 javah的时候要在根目录执行,-classpath带上android.jar的路径

编译通过的效果:

深圳市米奇云科技有限公司

无论是手写还是生成,对应的函数体是不会变的,无法就是在数据结构前加上J,代表着JNI,多了ENV和VM , 看上去也复杂了许多,但是大家不要畏惧,因为开发中有专门的人负责写这一层,上层只需要负责调用就可以了。

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class com_example_hellojni_LogOpen */

#ifndef _Included_com_example_hellojni_LogOpen

#define _Included_com_example_hellojni_LogOpen

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: com_example_hellojni_LogOpen

* Method: getLog

* Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_example_hellojni_LogOpen_getLog

(JNIEnv *, jobject);

/*

* Class: com_example_hellojni_LogOpen

* Method: callShow

* Signature: (Ljava/lang/String;)V

*/

JNIEXPORT void JNICALL Java_com_example_hellojni_LogOpen_callShow

(JNIEnv *, jobject, jstring);

/*

* Class: com_example_hellojni_LogOpen

* Method: callToastShow

* Signature: (Landroid/content/Context;Ljava/lang/String;)V

*/

JNIEXPORT void JNICALL Java_com_example_hellojni_LogOpen_callToastShow

(JNIEnv *, jobject, jobject, jstring);

#ifdef __cplusplus

}

#endif

#endif

这里已经生成了.h文件,我们把它放入JNI文件夹中,Eclipse会自动帮我们编译成 .so 文件,前提是你需要设置好NDK的路径与Builder的设置,只要修改了,就会立即自动编译,当然,我设置的Builder选项就是立即编译的。

深圳市米奇云科技有限公司

默认是生成 armeabi 文件夹,代表了 ARM 的 CPU 。其它应用程序直接使用的话就只需引用这个so,这里的 .so 库是指定了类名和包名,所以使用的时候要注意匹配上,不然会报错。

最后调用下这个So库的方法,输出名字:

深圳市米奇云科技有限公司

当然,你也可以编写.cpp,这样可以用 env->FindClass("com/immqy/dujinyang/DuJNI"); 脱离类名的约束。

相关TAG标签
上一篇:显卡驱动有什么用?更新新显卡驱动有什么好处?显卡驱动怎么更新?
下一篇:android:visibility和android:scaleType 属性
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站