jni在Android studio中的配置和使用(二)
来源:互联网 发布:vb.net和c#区别 编辑:程序博客网 时间:2024/06/03 21:45
上一篇我们讲述了通过ndkBuilder的方式,最后再补充一点.
如果你前面的操作都成功了,最后会在你该module的builde/intermediates/ndk/debug/lib目录下生成so库,
你可以直接使用so库,效果是一样的
我这里已经把jni文件夹删掉,然后创建了一个jniLibs,把刚刚的so库拷过来,然后运行代码效果是一样的.(ps 使用全部编译,别用Instant Run,否则如果有问题是表现不出来的)
—-叫我分割线———————-
2.使用cmake进行项目的构建
– 1.首先在创建project的时候勾选Include c++ support(注意,是创建project,不是module)
– 2.选择c/c++的标准
上面的配置你也可以直接在你module的build.gradle的defaultConfig节点中设置,效果是一样
externalNativeBuild { cmake { cppFlags "-frtti -fexceptions" //cppFlags "-std=c++11" } }
– 3.在build.gradle中的android节点下面会增加配置,指定生成so文件配置文件的路径
externalNativeBuild { cmake { path "CMakeLists.txt" } }
– 4.创建需要调用C/C++代码的java代码,和ndkBuilder相同
public class JniUtils { public static native String getString();}
– 5.编写你的c/c++代码
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_cmakedemo_utils_JniUtils */#ifndef _Included_com_cmakedemo_utils_JniUtils#define _Included_com_cmakedemo_utils_JniUtils#ifdef __cplusplusextern "C" {#endif/* * Class: com_cmakedemo_utils_JniUtils * Method: getString * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_cmakedemo_utils_JniUtils_getString (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endifJNIEXPORT jstring JNICALL Java_com_cmakedemo_utils_JniUtils_getString (JNIEnv *env, jclass jobj){ return (*env)->NewStringUTF(env,"HelloWorld");}
– 6.配置你的CMakeLists.txt文件
创建CMakeLists.txt文件配置如下
cmake_minimum_required(VERSION 3.4.1) #指定cmake版本add_library(HelloWorld SHARED src/main/jni/HelloWorld.c) #括号中第一个 HelloWorld是生成的so文件的名称,要和你c/c++文件名相同target_link_libraries(HelloWorld log android) # 此处增加了,日志的链接库
注意,上面代码中三个HelloWorld的地方必须一致,和你c/c++文件名相同
– 7.静态导包
public class JniUtils { static{ System.loadLibrary("HelloWorld");// 你在cmakeList中设置的名称 } public static native String getString();}
– 到这里你所有的配置就完成了,你可以调用JniUtils中的getSting方法获取c/c++中的字符串
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) this.findViewById(R.id.tv); tv.setText(JniUtils.getString()); }}
遇到的问题
讲道理按照我上面的步骤一步一步来,是不会有什么问题的,如果不讲道理,那只能说
如果你遇到了什么问题,欢迎留言,最后屌大/胸大的同学麻烦帮忙顶一下
- jni在Android studio中的配置和使用(二)
- jni在Android studio中的配置和使用(一)
- JNI在Android Studio 2.2中基本配置和使用
- lambda:在android studio中的配置和使用lambda表达式
- GreenDao 在 Android Studio 中的配置使用
- Android Studio 配置以及JNI使用
- Android Studio使用jni环境配置
- 在Android Studio中使用Jni
- 在Android Studio中使用Jni
- 如何在Android Studio中使用JNI
- Android greenDAO在Android Studio中的配置与使用
- JNI基础(二)Android Studio 配置NDK
- android studio JNI使用
- Android Studio使用JNI
- android studio使用jni
- Android Studio 使用JNI
- ANDROID STUDIO JNI使用
- Android studio 使用jni
- git的使用案例
- 用JavaScript操作cookie — 第23.3.1节
- 关于volley请求没有回调信息的解决方法
- 向POJ开火
- 智慧珠海的主界面左滑菜单及ViewPager和RadioButton的使用
- jni在Android studio中的配置和使用(二)
- Eclipse workspace包含哪些工程的配置文件在什么地方?
- Android复习之旅--ContentProvider
- 如何利用SQL Server With As递归获取层级关系数据
- 机器学习(五):SVM支持向量机_Python
- CodeForces 37d
- TypeError: view must be a callable or a list/tuple in the case of include().
- HDU 1664 Different Digits (数论 -- 鸽笼原理 + BFS搜索 + 余数判重)
- 常见对象_把int数组拼接成字符串的案例改进版