Android Jni 学习实战之(一)
2011-12-06 23:02
239 查看
最近学习JNI,边学边做,把游戏“蚂蚁迷呀”的2D引擎改成JNI的,封装代码,同时提高运行速度。
初步探索步骤如下:一, 写Java 文件,确定JNI接口名:
重要的是这句:
确定接口。
二,编译工程,生成hf2d.class,到$MYPROJECT/bin/下,($MYPROJECT指我的Android工程目录),运行:
$javah -jni com.howfun.android.antguide.hf2d_jni.hf2d
在当前目录生成 hf2d.h, 注意目录不要跑过了,在bin/下即可。
考hf2d.h到$MYPROJECT/jni/ (新建这个jni目录),写hf2d.c如下:
四,下载android NDK包(我用的R4版),
$export NDK=my/ndk/path
$cd $NDK/android-ndk-r4b/,
$export NDK_PROJECT_PATH="~/workspace/AntGuide"
$./ndk-build
这里会生成俺想要的libhf2d.so文件
在第一步中,调用:
运行APK,会显示来自远方JNI的问候。
特别友情提示:不要在类路径里用下划线,不然需要在函数名的下划线后加“1“,如同我的反面典型:
包名:package com.howfun.android.antguide.hf2d_jni;
结果生成这个样子:
本小章完。待续:hf2d java引擎移植到jni
初步探索步骤如下:一, 写Java 文件,确定JNI接口名:
package com.howfun.android.antguide.hf2d_jni; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class hf2d extends Activity{ public void onCreate(Bundle savedInstanceState) { Log.d("jni", "oncreate()"); super.onCreate(savedInstanceState); /* * Create a TextView and set its content. the text is retrieved by calling * a native function. */ TextView tv = new TextView(this); tv.setText(stringFromJNI()); setContentView(tv); } public native String stringFromJNI() ; static { System.loadLibrary("hf2d"); } }
重要的是这句:
public native String stringFromJNI() ;
确定接口。
二,编译工程,生成hf2d.class,到$MYPROJECT/bin/下,($MYPROJECT指我的Android工程目录),运行:
$javah -jni com.howfun.android.antguide.hf2d_jni.hf2d
在当前目录生成 hf2d.h, 注意目录不要跑过了,在bin/下即可。
考hf2d.h到$MYPROJECT/jni/ (新建这个jni目录),写hf2d.c如下:
#include <string.h> #include <jni.h> #include "hf2d.h" JNIEXPORT jstring JNICALL Java_com_howfun_android_antguide_hf2d_1jni_hf2d_stringFromJNI (JNIEnv *env, jobject thiz) { return (*env)->NewStringUTF(env, "Hello from JNI !"); }三, 写Android.mk文件,放在$MYPROJECT/jni/, 如下 :
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hf2d LOCAL_SRC_FILES := hf2d.c include $(BUILD_SHARED_LIBRARY)具体各标号啥意思本人参考:$NDK/android-ndk-r4b/docs/ANDROID-MK.TXT,很详细。
四,下载android NDK包(我用的R4版),
$export NDK=my/ndk/path
$cd $NDK/android-ndk-r4b/,
$export NDK_PROJECT_PATH="~/workspace/AntGuide"
$./ndk-build
这里会生成俺想要的libhf2d.so文件
在第一步中,调用:
static { System.loadLibrary("hf2d"); }加载动态库,注意去掉前面"lib"字样。
运行APK,会显示来自远方JNI的问候。
特别友情提示:不要在类路径里用下划线,不然需要在函数名的下划线后加“1“,如同我的反面典型:
包名:package com.howfun.android.antguide.hf2d_jni;
结果生成这个样子:
Java_com_howfun_android_antguide_hf2d_1jni_hf2d_stringFromJN 多了个“1“, FT。。。
本小章完。待续:hf2d java引擎移植到jni
相关文章推荐
- Android Jni 学习实战之(一)
- android JNI学习三
- Android JNI和NDK学习(07)--JNI的常用API
- Android源码学习之如何创建使用JNI
- android JNI学习四
- Android再学习-->JNI
- android hal学习——aidl,java service,jni编写
- Android JNI学习之javah命令的正确使用 转
- Android JNI学习系列1.2—— JNI方法名,数据类型和方法签名的一些认识
- Android初步学习NDK和JNI开发(命令行的方式)
- JNI技术简介-android学习之旅(92)
- 学习android JNI的那些事儿--------1. 搭建环境
- 通过Android JNI编程来学习三大结构的ARM汇编
- Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识
- 学习android JNI的那些事儿--------5. Field & Method --> Accessing Mehtod
- Android学习日志9/11/2017 仿知乎日报实战
- Android学习(22)-实战要点
- Android学习JNI,使用C调用JAVA语言
- 学习android JNI的那些事儿--------7. 在JNI中创建java类对象
- Android(java)学习笔记260:JNI之native方法头文件的生成