Android_JNI实例
来源:互联网 发布:网络渠道销售授权书 编辑:程序博客网 时间:2024/05/01 01:56
实现Android 与C的交互
1.创建NDK环境搭建
2.配置环境变量
3.创建本地native方法
//创建本地方法,我直接在Activity中创建的 public native String getStringFromC();
这里如果使用系统给的AppCompatActivity,会出现异常找不到类AppCompatActivity,所以为了我继承的是Activity
Activity中完整代码
package com.oblivion.jni_text;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity implements View.OnClickListener { static { System.loadLibrary("jni_text"); }//javah -d jni -classpath <SDK_android.jar>;<APP_classes> lab.sodino.jnitest.MainActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(this); } public native String getStringFromC(); @Override public void onClick(View v) { Toast.makeText(MainActivity.this, getStringFromC(), Toast.LENGTH_SHORT).show(); }}
- Make一下,如果是project就MakeProject,如果是Module,就Make Module,如下图
4.到这一步需要构建com_oblivion_jni_text_MainActivity.h
实现方法有两个
第一个方式:直接书写,不过挺麻烦的,不推荐也不写了
第二个方式:Alt+F12,进入到Terminal控制台
通过cd指令进入到如下位置cd D:\AndroidStudioProjects\Demo\jni_text\src\main\java
在该位置下输入指令javah -jni com.oblivion.jni_text.MainActivity
//如下完整指令D:\AndroidStudioProjects\Demo\jni_text\src\main\java>javah -jni com.oblivion.jni_text.MainActivity
5.创建Android.mk文件
#指定编译的文件夹 指定当前文件目录 LOCAL_PATH := $(call my-dir) #编译器会定义很多的临时变量,中间变量,最好清空所有的中间变量。 include $(CLEAR_VARS) #编译出来模块的名称 LOCAL_MODULE := JniText # 编译的源代码的名称 LOCAL_SRC_FILES := JniText.c #编译一个动态库,静态库 #静态库 文件名.a 包含所有的函数并且函数运行的依赖,体积大,包含所有的API #动态库 文件名.so 包含函数,不包含函数运行的依赖,体积小,运行的时候,去操作系统寻找需要的API include $(BUILD_SHARED_LIBRARY)
6.根据创建出来的.h文件创建.c文件
#include "jni.h"jstring Java_com_oblivion_jni_1text_MainActivity_getStringFromC (JNIEnv * env, jobject obj){ return (*env)->NewStringUTF(env, "Hello from JNI !"); }
6.重新Make 一下,生成so文件
到这一步就进行完了,运行尝试一下吧,效果图在本章最上方
github源码地址
1 0
- Android_JNI实例
- Android_JNI的一个实例
- android_JNI数据类型
- android_JNI学习
- android_JNI学习
- Android_JNI浅析(1)
- Android_JNI浅析(2)
- android_JNI宏观介绍
- Android_JNI环境搭建
- Android_JNI浅析(2)
- Android_JNI常用操作记录
- Android视频:Android_JNI 从入门到精通
- linux下开发android_jni过程及错误经历
- linux下开发android_jni过程及错误经历
- 实例
- 实例
- 实例
- 实例
- Android内存优化总结
- NYoj811变态最大值
- codeforces 621E Wet Shack and blocks dp+矩阵幂优化!
- python 组织菜谱
- centos7 foxit reader占用CPU过高问题解决方案
- Android_JNI实例
- VMware Workstation的网络及虚拟编辑器
- 模拟实现shared_ptr
- Linux日志管理+ last lastlog lastb
- 修改vm屏幕与centos屏幕不匹配
- 模拟实现scoped_ptr
- Windows平台使用Gitblit搭建Git服务器图文教程
- MySQL再学笔记_00
- 朴素贝叶斯算法原理及Spark MLlib调用实例(Scala/Java/Python)