Android NDK开发
来源:互联网 发布:我的世界新手网络联机 编辑:程序博客网 时间:2024/05/28 01:35
安装好eclipse、ADT、NDK(r9以上)后,编写NDK的具体步骤:
1.新建一个Android project
file->new->project...->android->android application project,next。。。。。。
2.新建一个jni文件
工程,右键android tools->add native support...,给.so文件取名,完成后,工程中自动生成
myNdk.cpp文件中编写底层的代码,Android.mk文件中一般不需修改
3.myNdk.cpp
#include <jni.h>#include <string.h>extern "C" {JNIEXPORT jstring JNICALL Java_com_example_androidndk_JNI_getString(JNIEnv* env, jobject obj){ //返回一个字符串 return (env)->NewStringUTF("Hello NDK!");}}
JNI接口的命名规范是:Java_ + 调用该方法的包名(包名的点用_代替,即com_example_androidndk) + _ + 调用该接口的类名(即JNI) + _ + 方法名(即getString),对于实例方法,有两个参数是必要的,一个JNI的环境指针JNIEnv *,另一个是调用该方法的Java实例jobject,如果还需要传入参数,可在和两个参数后面接着加上去,例
JNIEXPORT jint JNICALL Java_com_example_androidndk_JNI_add(JNIEnv* env, jobject obj, jint a, jint b)注:这里加上extern“C”,是为了从C语言导出,避免错误出现如下错误
4.新建调用JNI
右键src下的包名(即将其和mainactivity同目录),new->class,输入名称JNI,即myNdk.cpp中调用该接口的类名(此二者名称应相同,但不一定要用JNI)
package com.example.androidndk;//此文件相当于函数声明public class JNI { //获取字符串 public native String getString(); }为什么要建这么一个文件,从个人理解上来说,你可以吧JNI.java看成class中的.h文件,把myNdk.cpp看成class中的.cpp文件,这样将来不管那个java文件调用相关的函数,都可以从JNI.java中调用
5.建立.so文件
只需build一下,eclipse就自动建立了.so文件
此时,可能会出现如下错误:Unable to launch cygpath. Is Cygwin on the path?
解决办法:
1)工程右键,点Properties->C/C++ Build的Building Settings中去掉Use default build command,然后输入${NDKROOT}/ndk-build.cmd
2)在C/C++ Build中点击Environment,点Add...添加环境变量NDKROOT,值为NDK的根目录
6.使用
在mainactivity.java中使用函数
package com.example.androidndk;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 {//使用静态代码块加载类库 static{ System.loadLibrary("myNdk");//一定要注意名称没有“lib" } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn1 = (Button)findViewById(R.id.show_btn); //定义本地类 final JNI jni = new JNI(); btn1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { //显示从C代码中返回的字符串 Toast.makeText(getApplicationContext(), jni.getString(), Toast.LENGTH_SHORT).show(); } }); } }运行程序
- Android NDK开发配置NDK
- Android NDK : NDK开发概要
- android NDK开发相关
- Android NDK应用开发
- Android NDK开发学习
- android NDK 开发
- Android NDK 开发
- android之NDK开发
- ANDROID 底层 NDK 开发
- android NDK 开发
- Android之NDK开发
- Android ndk开发入门
- Android ndk 开发demo
- Android NDK 开发分享
- Android NDK开发
- Android之NDK开发
- android NDK开发网站
- Android之NDK开发
- 向网络发送GET/POST请求参数
- 情人节的表白神器:H5 canvas ❤动画面
- iOS AutoLayout
- 好消息!ios10越狱插件造成桌面图标消失的完美解决方法来了!!!
- iOS 数组去重
- Android NDK开发
- Linux如何查看jdk的安装路径
- 【matlab】进度条(waitbar)
- dl中的一些概念学习
- leetcode -- 257. Binary Tree Paths【遍历次序】
- vue学习资料
- Linux中通过jsvc自启动tomcat乱码问题
- leetcode 78. Subsets
- Android App整体架构设计的思考