如需转载请标明出处 Average
http://blog.csdn.net/Average77/article/details/72961677
然后只需要等待Ndk下载完成,下载到最后的时候多等一会,解压缩的时候有些慢,会显示Unzipping…
按windows+r,输入cmd进入窗口,输入ndk-build,显示如下界面即为成功,因为没有进入到工程中,所以提示不能找到应用工程文件夹,不影响后续使用
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := str
LOCAL_SRC_FILES := str.cinclude $(BUILD_SHARED_LIBRARY)
其中 LOCAL_MODULE 和 LOCAL_SRC_FILES 的值是要自己改的, LOCAL_MODULE是自己建的so库的名字,LOCAL_SRC_FILES 是上图所示jni下建的c++的源文件的名字
* Application.mk中写如下内容
配置全部的cpu类型,写法如下
APP_ABI := all
配置部分cpu类型,写法如下,需要什么类型就写什么类型的,中间用空格隔开
APP_ABI := armeabi x86
#include
#include "str.h"
#include
//注意包名以及类名之间相连处,把点变成下划线
JNIEXPORT jstring JNICALL Java_com_zyy_ndktest_MainActivity_getKey
(JNIEnv *env, jclass obj,jint type)
//JNIEnv :代表java环境,通过这个环境可以调用java里的代码
//jint 就是 java 中的int类型
{
switch (type) {
case 1:
//返回的字符串
return (*env)->NewStringUTF(env, "12345678");
break;
case 2:
return (*env)->NewStringUTF(env, "00009998878");
break;
default:
return (*env)->NewStringUTF(env, "444566778");
break;
}
}
#ifndef NDKTEST_STR_H
#define NDKTEST_STR_H
#endif //NDKTEST_STR_H
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
这个so库会在第一次使用MainActivity这个类的时候加载。(static代码块声明的代码会先于onCreate方法执行)
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this, getKey(1), Toast.LENGTH_SHORT).show();
}
static {
System.loadLibrary("str");
}
public native String getKey(int type);
}
这时候运行一下工程,因为传入的值为1,所以能够吐司出str.c中getkey方法下的case 1: 吐司出12345678;
运行有时候会看到这样一个错误反复出现,具体解决办法看这里