博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ubuntu下NDK环境搭建以及使用
阅读量:5235 次
发布时间:2019-06-14

本文共 2778 字,大约阅读时间需要 9 分钟。

1.下载并解压ndk到任意目录。

2.根据ndk解压目录配置环境变量。

在终端输入vim .hashrc,在最后配置如下:

 

然后“Esc”退出编辑状态,“Shift + :”使终端接受编译器命令,“wp”保存,“q!”或“Ctrl + Z”退回到终端界面,环境变量添加完成。这里注意要重启终端后才会生效。

3.在终端输入ndk-build,如显示如下则环境搭建成功。

4.使用时,先创建java代码,如下:

public class JnitestMainActivity extends Activity {       private EditText edittext;       private TextView textview;       private Button btn;               private native int myFun(int n);       static {               System.loadLibrary("jnitest");       }       @Override       protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_jnitest_main);            edittext = (EditText)findViewById(R.id.edit_text);    textview =(TextView)findViewById(R.id.text_view);    btn = (Button)findViewById(R.id.button);    btn.setOnClickListener(new OnClickListener() {                @Override    public void onClick(View v) {    // TODO Auto-generated method stub    String content = edittext.getText().toString();    int n;    if(!content.equals("")){            n = Integer.valueOf(content);//ok            textview.setText(content + "!" + "=" +myFun(n));            }     }        });}

 

然后编译该工程使产生 JnitestMainActivity.class文件,供下一步产生.h文件使用。

5.产生头文件,先在工程中创建jni文件夹,在终端进入工程目录,输入javah -classpath bin/classes -d jni com.test.jnitest.JnitestMainActivity

,具体意义可以用javah –help指令察看,需要说明的是-classpath对应的参数应该为com文件夹所在目录,有的可能是bin。

生成的头文件为:com_test_jnitest_JnitestMainActivity.h

内容是:

/* DO NOT EDIT THIS FILE - it is machine generated */#include 
/* Header for class com_test_jnitest_JnitestMainActivity */#ifndef _Included_com_test_jnitest_JnitestMainActivity#define _Included_com_test_jnitest_JnitestMainActivity#ifdef __cplusplusextern "C" {#endif/* * Class: com_test_jnitest_JnitestMainActivity * Method: myFun * Signature: (I)I */JNIEXPORT jint JNICALL Java_com_test_jnitest_JnitestMainActivity_myFun( JNIEnv *, jobject, jint);#ifdef __cplusplus}#endif#endif

 

JNIEnv*, jobject是所有jni函数必有的两个参数,分别表示jni环境和对应的java类(或对象)本身

6.编写相应的.c文件,先把上面的函数拷过来,删掉JNIEXPORT和 JNICALL,具体如下:

#include 
#include
jint factorial(jint n) { if (n == 1) { return 1; } return factorial(n - 1) * n;}jint Java_com_test_jnitest_JnitestMainActivity_myFun(JNIEnv * env, jobject this, jint n) { return factorial(n);//求阶乘}

完成.c文件后com_test_jnitest_JnitestMainActivity.h就没用了,可删除。

7.编写Android.mk文件,具体如下:

LOCAL_PATH := $(call my-dir)//必须有

 

include $(CLEAR_VARS)//清除LOCAL开头的变量

 

LOCAL_MODULE := jnitest//要生成的库文件

LOCAL_SRC_FILES := jnitest.c//需要编译的C源文件

 

include $(BUILD_SHARED_LIBRARY)//编译成一个共享库

该脚本还有其他宏,感兴趣可以研究下。

8.编译生成.so共享库文件,进入工程目录,输入ndk-build命令,就会在libs/armeabi目录下生成libjnitest.so,重新编译工程,libjnitest.so共享库会一起打包在apk文件内。

 

转载于:https://www.cnblogs.com/kingOfPointer/p/3578638.html

你可能感兴趣的文章
前端程序员容易忽视的一些基础知识
查看>>
ISO日期格式标准,浏览器到服务器到mysql中的时区
查看>>
python 函数、装饰器、迭代器、生成器、列表生成式
查看>>
捕获JSON 解析错误
查看>>
java-类和重载笔记
查看>>
java中Date,SimpleDateFormat
查看>>
Swift学习Day005
查看>>
第九章笔记
查看>>
12558 - Egyptian Fractions (HARD version) (IDA* + 剪枝)
查看>>
Wireshark 文件分割和合并
查看>>
结对编程项目-四则运算 挑战出题
查看>>
数组是什么
查看>>
【MM自动记账】自动记账事务说明(转)
查看>>
MyBatis_SelectKey使用oracle 序列插入主键
查看>>
System.getproperty()能取到的值
查看>>
插值法(内插法)
查看>>
php 关于文件夹的一些封装好的函数
查看>>
Java并发--Java中的CAS操作和实现原理
查看>>
java1.8新特性整理(全)
查看>>
elementUI之通过指定 Table 组件的 row-class-name 属性来为 Table 中的某一行添加 class改变该行的颜色等样式。...
查看>>