Android NDK的简单例子
来源:互联网 发布:日本旅游花费 知乎 编辑:程序博客网 时间:2024/05/01 07:37
PS:我使用的是NDK r-10b,r7版本以上都是不用cygwin的
一、
新建Android工程,在工程上右键点击Android Tools->Add Native Support...->finish
工程就会多一个jni的文件夹,jni下有Android.mk和cpp文件。Android.mk是NDK工程的Makefile,cpp就是NDK的源文件。
二、
新建一个类,并用native申明两个函数:
package com.example.ndktest;public class JniClient { static public native String AddStr(String strA, String strB); static public native int AddInt(int a, int b);}
用命令行工具cd到工程目录下/bin/classes
输入javah com.example.ndktest.JniClient
这里的com.example.ndktest是包名,后面是类名,于是在目录下会生成com_example_ndktest_JniClient.h头文件,再把这个头文件复制到工程的jni文件下。
三、在cpp文件里实现
//#include <jni.h>#include <com_example_ndktest_JniClient.h>#include <stdlib.h>#include <stdio.h>JNIEXPORT jstring JNICALL Java_com_example_ndktest_JniClient_AddStr (JNIEnv *env, jclass arg, jstring instringA, jstring instringB){jstring str=env->NewStringUTF("HelloWorld from JNI !"); // jstring str = (*env)->NewStringUTF(env, "HelloWorld from JNI !"); return str;}JNIEXPORT jint JNICALL Java_com_example_ndktest_JniClient_AddInt(JNIEnv *, jclass, jint a, jint b){return (a + b);}
PS:这里需要注意,名字必须和头文件严格对齐,否则会出现许多错误。(因为我之前看网上教程直接复制忽略了包名和类名,绕了很多弯路)
四、MainActivity文件
public class MainActivity extends Activity {static {System.loadLibrary("NDKTest");}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); int iSum = JniClient.AddInt(5, 7); String strSum = "5 + 7 = " + iSum; String str = JniClient.AddStr("test", "test"); TextView tv1 = new TextView(this); tv1.setText(strSum); setContentView(tv1);}
想实现不同的功能只用选择“str”或者“strSum”即可
1 0
- Android NDK的简单例子
- Android studio ndk开发--简单的例子
- 使用Android-studio简单实现一个NDK的例子
- Android Studio NDK环境配置与JNI简单的例子
- Android NDK JNI 简单例子2
- NDK的一个简单例子代码
- 最简单 NDK 例子
- android ndk的简单应用
- android ndk 的简单使用
- Android中的第一个NDK的例子
- Android中的第一个NDK的例子
- Android中的第一个NDK的例子
- Android中的第一个NDK的例子
- Android NDK系列(2) --- 简单so例子动态分析
- Android Jni 例子,ndk
- Android NDK JNI 简单例子1 : Android NDK配置和下载
- android ndk 入门 - 一个简单的ndk工程
- Android NDK入门(实现简单的NDK程序)
- 复制构造函数
- 【网络流24题】最小路径覆盖问题
- 1002. A+B for Polynomials (25)
- Thread之脏读
- windows2003 IIS6 部署MVC3和MVC4程序
- Android NDK的简单例子
- react -native 自定义按钮
- vi编辑器的使用 linux命令
- ++i和i++的根本区别
- android.view.InflateException: Binary XML file line #6: Error inflating class com.marshalchen.ultima
- STM32 CAN 通信 滤波设置问题
- NDK编译FFmpeg库(windows下Eclipse )
- IntelliJ IDEA---和JBOSS的结合
- Atitit 外包管理规范attilax总结