Android NDK入门
来源:互联网 发布:js判断变量是否未定义 编辑:程序博客网 时间:2024/06/07 06:53
还是觉得Android文档太少,在之前的Android 中aidl如何import文件牢骚过一次了已经。于是我来尽微薄之力~
我理解的NDK是允许你把程序的一部分代码用C或C++来实现,通过JNI与Java代码交互。不要想整个程序都用C/C++完成,Android是不允许的,你的程序必须运行在Dalvik虚拟机里。
至于是什么任务需要用C/C++,那就不是我要討論的了,比如下面我要演示的这个傻逼程序就真不适合用NDK
安装NDK
你首先要保证自己的Android SDK已经安装完成,然后下载NDK,随便你解压到哪里。下面的$NDK代表你解压后的NDK路径
新建一个Android项目
如果你用Eclipse或者用Netbeans就不用我说了,记得项目名称是fuckGFW。
android create project -n fuckGFW -t 8 -p fuckgfw -k fuck.gfw -a FuckGFW
然后在项目根目录下建立一个jni文件夹,C/C++代码就要放在那里面
修改FuckGFW.java文件
你得懂JNI,我也是现学的。只是很普通的的JNI操作,内容如下
package fuck.gfw;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class FuckGFW extends Activity{ static { System.loadLibrary("fuckGFW"); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText(fuck("GFW")); setContentView(tv); } private native String fuck(String what);}
创建fuckgfw.c
还是得懂JNI才行,可以看看JNI简单入门。这个文件要放在jni目录里
#include <jni.h>#include <stdlib.h>#include <stdio.h>JNIEXPORT jstring JNICALL Java_fuck_gfw_FuckGFW_fuck(JNIEnv *env, jobject obj, jstring what) { const jbyte *l_what; char *result; l_what = (*env)->GetStringUTFChars(env, what, NULL); if (l_what == NULL) { return NULL; /* OutOfMemoryError already thrown */ } result = malloc(strlen(l_what) + 6); if (result == NULL) { return NULL; } sprintf(result, "fuck %s", l_what); jstring r = (*env)->NewStringUTF(env, result); free(result); return r;}
创建Android.mk
这个也要放在jni目录下。Android.mk就是一个Makefile罢了,不过是Android专用的,推荐查看NDK中的文档ANDROID-MK.TXT,很简洁易懂
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := fuckgfw.cLOCAL_MODULE := fuckGFWinclude $(BUILD_SHARED_LIBRARY)
编译运行
打开你的emulator,在项目目录里运行
$NDK/ndk-buildant install
于是fuck GFW就已经出现了
- 【Android】Android NDK入门
- Android NDK 使用入门
- Android NDK入门搭建
- Android NDK编程入门
- Android: NDK编程入门
- Android ndk开发入门
- Android NDK编程入门
- android ndk 入门实践
- android ndk 入门
- Android NDK入门
- Android NDK 入门
- Android NDK 入门小计
- Android NDK编程入门
- Android NDK入门理解
- Android NDK开发入门
- Android NDK入门
- Android NDK入门
- android-ndk-ubuntu-入门
- 黑马程序员---反射2
- CvMat的基本操作
- iphone开发图片如何自适应屏幕问题
- PPPD脚本释疑
- 善用GridView控件的HyperLinkField数据行
- Android NDK入门
- 另类思路解决textbox不支持(半)透明背景颜色的问题
- ADB commands
- js页面跳转代码
- Saving Word 2007 Documents to PDF and XPS Formats
- 阿里巴巴离职DBA职业生涯总结
- Android ApiDemos示例解析(81):Graphics->Text Align
- 常见DB2命令
- 反射详解-通过Class实例化具体类的对象(无参数构造)