还是觉得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);  return (*env)->NewStringUTF(env, result);}

创建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就已经出现了

更多相关文章

  1. Android(安卓)正移植到C#
  2. android 依赖工程 Android(安卓)工程引用其他Library工程
  3. android google 分屏 多窗口 按home键界面错乱故障分析(一)分屏的
  4. 使用jni接口完成android本地程序的运行--具体的操作
  5. 框架模式 MVC 在Android中的使用
  6. 移动语音引擎相关开发笔记
  7. Android(安卓)Studio com.android.dex.DexException: Multiple d
  8. Android开发环境迁移到Android(安卓)Stdio 3.5.2
  9. [置顶] android 新浪微博客户端的表情功能的实现

随机推荐

  1. 从Android到React Native开发(一、入门)
  2. Android多线程(三)HandlerThread源码原理解
  3. 一个查看xhprof数据文件的docker镜像
  4. 教你用php读写csv格式的文件
  5. 详解PHP位运算符
  6. 初学php,你遇到过这个低级问题吗?
  7. 一个php框架的简单实现,仅实现简单路由层
  8. 关于PHP打印格式化显示利器
  9. PHP常见数组排序方法小汇总
  10. php实现断点续传大文件