android studio使用jni
2016-05-27 14:31
204 查看
如果你要使用jni的话首先下载一个ndk,然后配置一下环境变量。
在android studio中点击file->project structure中配置
然后在app->src->main中创建一个jni文件夹。
在jni文件中创建一个c文件,.c为后缀。
这是最基本的代码,返回一个字符串。jstring是ndk中定义好的一个字符串基本类型。
方法的参数是固定。你可以参考ndk文件夹下sample文件夹,里面有很多的事例。
这个是你java类中方法所在的位置。比如:
这是我在java中创建的一个activity类。helloFromC()方法为本地c调用的方法,要在类型名前加上native定义。里面的static静态初始化把编译好的libhello.so文件加载进来。
文件创建好之后,你还需要在jni文件中创建一个Android.mk配置文件。
编写好之后再jni文件夹中使用命令ndk-build.cmd编译,编译成功就可以运行了。
如果你要调用带参数的方法,只需在
由于cpu平台架构的不同,有x86,arm的当你使用jni时会自动编译成arm的so文件,在x86下不能使用。所以为了兼容,ndk6.0以上的可以在jni下创建一个Application.mk配置文件,内容为:
然后在jni目录下重新编译会编译成三个目录,如上的三个目录。这样你就可以在两个平台上使用了。
你可以直接编译运行,不需要单独编译c文件。
在android studio中点击file->project structure中配置
然后在app->src->main中创建一个jni文件夹。
在jni文件中创建一个c文件,.c为后缀。
#include<stdio.h> #include<stdlib.h> #include<jni.h> jstring Java_com_jiang_shuaijie_test_HelloActivity_helloFromC(JNIEnv* env,jobject thiz){ char* arr="hello c"; jstring jstr=(*(*env)).NewStringUTF(env, arr); return jstr; }
这是最基本的代码,返回一个字符串。jstring是ndk中定义好的一个字符串基本类型。
JNIEnv* env,jobject thiz
方法的参数是固定。你可以参考ndk文件夹下sample文件夹,里面有很多的事例。
Java_com_jiang_shuaijie_test_HelloActivity_helloFromC
这个是你java类中方法所在的位置。比如:
package com.jiang.shuaijie.test; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class HelloActivity extends AppCompatActivity { static { System.loadLibrary("hello"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello); } public void onClick(View view) { Toast.makeText(this, helloFromC(), Toast.LENGTH_SHORT).show(); } public native String helloFromC(); }
这是我在java中创建的一个activity类。helloFromC()方法为本地c调用的方法,要在类型名前加上native定义。里面的static静态初始化把编译好的libhello.so文件加载进来。
文件创建好之后,你还需要在jni文件中创建一个Android.mk配置文件。
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SRC_FILES := Hello.c include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE 这个是你起的类库的名字
LOCAL_SRC_FILES 这个是类库的源文件
编写好之后再jni文件夹中使用命令ndk-build.cmd编译,编译成功就可以运行了。
如果你要调用带参数的方法,只需在
jstring Java_com_jiang_shuaijie_test_HelloActivity_helloFromC(JNIEnv* env,jobject thiz) 括号内继续加参数。比如:(JNIEnv* env,jobject thiz,jint a,jint b)
由于cpu平台架构的不同,有x86,arm的当你使用jni时会自动编译成arm的so文件,在x86下不能使用。所以为了兼容,ndk6.0以上的可以在jni下创建一个Application.mk配置文件,内容为:
APP_ABI := armeabi armeabi-v7a x86
然后在jni目录下重新编译会编译成三个目录,如上的三个目录。这样你就可以在两个平台上使用了。
你可以直接编译运行,不需要单独编译c文件。
相关文章推荐
- Android自定义ListView,GridView嵌套防止自动滚动
- Android CTS(兼容性测试)
- The following classes could not be found: - android.support.v7.internal.widget.ActionBarOverlayLayou
- Android最佳性能实践(四)——布局优化技巧
- android ScrollView 中子控件设置高度后不起作用的解决方法
- Android最佳性能实践(三)——高性能编码优化
- Android图片压缩上传之基础篇
- Android最佳性能实践(二)——分析内存的使用情况
- Android最佳性能实践(一)——合理管理内存
- Android安全攻防战,反编译与混淆技术完全解析(下)
- Android安全攻防战,反编译与混淆技术完全解析(上)
- android 自定义Dialog Style基本设置
- Android中的第一个NDK的例子
- Android性能优化之数据库优化
- Android Universal Image Loader 源码分析
- [Android] View 工作原理(二)
- android数据库操作优化(二)
- android数据库操作优化(一)
- android 基础 加密实现3DES
- 手把手教你做视频播放器(六)-竖屏的播放界面