Android安全–使用Eclipse进行NDK开发

通过NDK开发,可以使用C++编写代码,生成so文件,然后通过Android应用的Java代码调用接口使用C++里面的函数。

一、首先下载ADT和NDK

下载地址:

ADT:http://developer.android.com/sdk/installing/installing-adt.html

NDK:http://developer.android.com/ndk/downloads/index.html#download

然后配置好NDK的路径:

QQ截图20150829155522

二、新建一个Android Project,并添加本地代码支持

QQ截图20150826232316

image

添加完后会在工程目录下新生成一个jni文件夹

QQ截图20150829155639

三、在Android Projecty下面新建一个NativeClass.java,编写如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.monkey.testndk;

import android.util.Log;

public class NativeClass {
    public static native boolean jniArrayAdd(int[] a,int b);
   
    static{
        Log.i("NativeClass", "before load library");
        System.loadLibrary("TestNDK");
        Log.i("NativeClass", "after load library");
    }
}

四、接下来就要给刚刚新建的类,生成头文件了,在Eclipse中配置外部工具。

QQ截图20150829162134

点击Progam新建一个,配置好执行的javah命令。

QQ截图20150829163542

上面location的地址记得改成本机javah.exe的路径,确定即可。然后点击Origanize Favorites..,把刚刚新建的javah加进来。

QQ截图20150829161513

点击javah,然后在jni目录下按F5,就能看到新建出来的头文件了。(记得先选中要生成的源文件目录)

QQ截图20150829161554

五、编写MainActivity代码如下:

1
2
3
4
5
6
7
8
        TextView tv = new TextView(this);
        int[] array = new int[]{1,2,3};
        String str = "调用C++前:"+Arrays.toString(array)+"\n";
        boolean isCopyofArrayInCpp = NativeClass.jniArrayAdd(array, 5);
        str += "在C++中为副本? "+isCopyofArrayInCpp+"\n";
        str += "调用C++后:"+Arrays.toString(array);
        tv.setText(str);
        setContentView(tv);

六、编写C++代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
JNIEXPORT jboolean JNICALL Java_com_monkey_testndk_NativeClass_jniArrayAdd(
        JNIEnv* env,jclass,jintArray array,jint b
){
    jsize size = env->GetArrayLength(array);
    jboolean isCopy;
    jint* pArray = (jint*)env->GetPrimitiveArrayCritical(array,&isCopy);
    for(int i = 0; i < size; i++)
        pArray[i] += b;

    env->ReleasePrimitiveArrayCritical(array,pArray,JNI_COMMIT);
    return isCopy;
}

七、在jni目录下新建文件Application.mk,添加需要生成的目标平台架构,如下:

APP_ABI := armeabi armeabi-v7a x86

八、编译后就能看到不同平台生成了不同的so文件。

image

九,最后运行就能看到结果显示:

image

本文链接:http://www.alonemonkey.com/eclipse-ndk.html