JNI入门完整详细示例
2013-01-22 13:55
357 查看
mainActivity如下:
HelloWorld.c如下:
Android.mk如下:
Application.mk.mk如下:
main.xml如下:
package c.c; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity; /** * JNI的HelloWorld示例 * 1 下载和安装cygwin.重要参考资料: * http://www.cnblogs.com/playing/archive/2011/07/14/2106727.html * 注意make组件的安装,该步骤没有截图,但和binutils,gcc,gcc-mingw,gdb * 是很类似的 * 2 检查cygwin是否安装正确 * 通过命令行进入cygwin 输入cd $NDKROOT,若输出bash_profile中于ndk * 配置相关的一行信息则表示安装成功. * 注意这里的输入的命令是cd $NDKROOT,所以bash_profile文件中配置的 * 名称也应是NDKROOT.即两者保持一致 * 3 编译 * 3.1 进入cygwin,然后cd,然后空格,然后拖入android工程的完成路径. * 例如:$ cd /cygdrive/d/workplace/JNITest * 3.2 再执行命令$ $NDKROOT/ndk-build -B * 即可生成.so文件 * * 编写与JNI有关的HelloWorld的小例子,参考资料: * http://blog.csdn.net/zhangjie201412/article/details/7297899 * 注意的问题: * 1 JNI函数的名称格式 * Java_完整的Activity路径_方法名 * 比如此处: * jstring Java_c_c_MainActivity_getString(JNIEnv *env,jobject jobj) * 该问题在上面的网址中也有提及,要尤其注意 * 2 利用 System.loadLibrary()载入原生库时 * 参数为.c文件的名称,比如: * System.loadLibrary("HelloWorld") */ public class MainActivity extends Activity { private Button mButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init(){ mButton=(Button) findViewById(R.id.button); mButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { String result=getString(); Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show(); } }); } //声明JNI函数函数 public native String getString(); //载入原生库 static { System.loadLibrary("HelloWorld"); } }
HelloWorld.c如下:
//HelloWorld.c #include <string.h> #include <jni.h> jstring Java_c_c_MainActivity_getString(JNIEnv *env,jobject jobj) { return (*env)->NewStringUTF(env,"HelloWorld,JNI is good"); }
Android.mk如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := HelloWorld LOCAL_SRC_FILES := HelloWorld.c LOCAL_LDLIBS += -llog -ldl include $(BUILD_SHARED_LIBRARY)
Application.mk.mk如下:
APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions APP_ABI := armeabi-v7a
main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="hello JNI" /> </RelativeLayout>
相关文章推荐
- JNI入门完整详细示例
- SpringMVC札集(01)——SpringMVC入门完整详细示例(上)
- SpringMVC札集(03)——基于注解的SpringMVC入门完整详细示例
- SpringMVC札集(02)——SpringMVC入门完整详细示例(下)
- webpack+vue+vueRouter模块化构建完整项目实例详细步骤-入门篇
- android下NDK开发环境搭建及TestJNI入门实例完整过程
- Android Studio ndk-Jni开发详细入门,Aes加密demo
- Android自定义组合控件详细示例 (附完整源码)
- Android-个人心得:超详细的JNI(NDK)入门与使用
- ContentObserver的使用完整详细示例
- CI框架入门示例之数据库取数据完整实现方法
- 自定义ContentProvider以及ContentObserver的使用完整详细示例
- Android利用Volley异步加载数据完整详细示例(二)
- 源码方式向openssl中添加新算法完整详细步骤(示例:摘要算法SM3)【非engine方式】
- iOS 3D Touch超详细入门介绍(附带demo示例代码)
- webpack+vue+vueRouter模块化构建完整项目实例详细步骤-入门篇
- Java利用IO流复制照片完整示例和详细分析
- [2014.1.31] Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
- Android利用Volley异步加载数据完整详细示例(二)
- webpack+vue+vueRouter模块化构建完整项目实例超详细步骤(附截图、代码、入门篇)