在 Android 中 使用JNI
2017-02-09 16:29
323 查看
1、新建一个android工程
2、在工程目录下添加名为 jni 的文件夹(必须)
3、在jni文件夹下新建你的.c文件(我的叫Hello.c)
4、在jni文件夹下新建名字为Android.mk文件
4.1Android.mk文件中加入
LOCAL_PATH := $(call my-dir) //当前路径(如果你了解shell语言,应该可以很轻松的理解)
include $(CLEAR_VARS)
LOCAL_MODULE := Hello //要生成的.so库名 表示编译的动态库名称
LOCAL_SRC_FILES := Hello.c //你的.c文件名字 表示源代码文件
include $(BUILD_SHARED_LIBRARY)5、开始写 C 代码 (比较简单,返回一个字符串:hello world from c")
#include <string.h>
#include <jni.h>
jstring
Java_com_example_testnndk_MainActivity_helloWorldFromC(JNIEnv* env, jobject obj){ //Java_包名_类名_方法名
char* str = "hello world from c";
return (*env)->NewStringUTF(env,str);
}6、在android 项目的MainActivity 中编写代码
static {
System.loadLibrary("Hello");//上面的.mk里生成的名字
}
public static native String helloWorldFromC();
7、运行cygwin,输入命令cd .../jni,进入到.../jni目录。(进入到项目的jni目录)
输入$NDK/ndk-build,执行成功后,它会自动生成一个libs目录,把编译生成的.so文件放在里面。($NDK是调用我们之前配置好的环境变量,ndk-build是调用ndk的编译程序)
8、在MainActivity中获取Hello.c输出的值
String s = helloWorldFromC();
2、在工程目录下添加名为 jni 的文件夹(必须)
3、在jni文件夹下新建你的.c文件(我的叫Hello.c)
4、在jni文件夹下新建名字为Android.mk文件
4.1Android.mk文件中加入
LOCAL_PATH := $(call my-dir) //当前路径(如果你了解shell语言,应该可以很轻松的理解)
include $(CLEAR_VARS)
LOCAL_MODULE := Hello //要生成的.so库名 表示编译的动态库名称
LOCAL_SRC_FILES := Hello.c //你的.c文件名字 表示源代码文件
include $(BUILD_SHARED_LIBRARY)5、开始写 C 代码 (比较简单,返回一个字符串:hello world from c")
#include <string.h>
#include <jni.h>
jstring
Java_com_example_testnndk_MainActivity_helloWorldFromC(JNIEnv* env, jobject obj){ //Java_包名_类名_方法名
char* str = "hello world from c";
return (*env)->NewStringUTF(env,str);
}6、在android 项目的MainActivity 中编写代码
static {
System.loadLibrary("Hello");//上面的.mk里生成的名字
}
public static native String helloWorldFromC();
7、运行cygwin,输入命令cd .../jni,进入到.../jni目录。(进入到项目的jni目录)
输入$NDK/ndk-build,执行成功后,它会自动生成一个libs目录,把编译生成的.so文件放在里面。($NDK是调用我们之前配置好的环境变量,ndk-build是调用ndk的编译程序)
8、在MainActivity中获取Hello.c输出的值
String s = helloWorldFromC();
相关文章推荐
- TabLayout+ViewPager 懒加载
- Android EditText maxLines无效问题
- Android的ListView数据更新后,如何使最新的条目可以自动滚动到可视范围内?
- android xml转义符
- android——框架的实现系列(资源的依赖注入)
- Android Studio模板
- android利用MediaCodec硬解码
- Android视图performClick和callOnclick的区别
- Android 热修复 Tinker接入及源码浅析
- Android Drawable之ScaleDrawable
- android studio自动导入所有包
- Android 拿来就用的圆形图片控件
- Android Drawable之ClipDrawable
- Android 随笔(2)
- Android中关于外部存储的一些重要函数
- Android中关于内部存储的一些重要函数
- Android Drawable之InsetDrawable
- Android使用easypermission动态获取权限
- Android小技巧-SharedPreferences实现设置界面
- Android 适配屏幕问题(一) 自动生成dimens文件