这几天需要使用C语言在底层编译,所以就打算在Android studio中打造可以编译C的环境,毕竟使用Android studio久了,就不怎么想用Eclipse开发了
废话不多说,直接来看一波集成过程
第一步:
这个就是我创建的一个普通的Android项目的列表
第二步:
进入Android studio的SDK Location
具体方式:File->Project Structure->SDK Location
第三步:
选择你的NDK location:
推荐尽量从网上单独下载NDK,不要在SDK Manager里面下载,有时候在里面下载的会出现问题,我就出现了,我也不知道什么原因,有大神知道的话,可以留言告诉下在下,抱拳了 老铁
这是我的ndk:
http://pan.baidu.com/s/1hrPPquS
密码:qcud
如果不知道怎么使用的话,直接百度吧,度娘有什么多的解释
第四步:
在你那个MainActivity中写代码:
public native
String
getString
();
这个时候需要来一波注意了,MainActivity不能继承与AppCompatActivity这个类,而需要继承与Activity这个类,我就是被这个坑给坑了一天多的时间,果然太恶心了这东西
然后方法名会报红色,这个时候不要紧张,build project一下,生成MainActivity类的.class文件
具体位置
形成这些要干啥呢,不要紧张,继续看下一步
第五步:
打开你的Android studio命令窗口,也就是
这个东西.如果你不懂linux命令的话,你就直接复制粘贴,更改自己的路径 就可以了
然后在上面执行:
cd app\src\main //进入main文件夹
接下来使用javah命令,生成对应的头文件:
javag -d -jni -classpath D:\adt-bundle-windows-x86_64-20140321\sdk\platforms\android-22\android.jar;../../build/intermediates/classes/debug com.example.ios.studentday07.MainActivity
注意了:android.jar这个东西,需要换成你电脑上sdk中android..jar的路径,然后最后那个是包名.类名,就是你需要执行c中的方法的那个类的包名和类名
然后你会发现你的目录中自动的出现了一个jni文件夹,文件夹下有个你 包名.类名.h 的文件
这个就表示你生成头文件成功了
第六步:
在你的jni文件夹下面创建一个c/c++文件类型,然后你就可以在里面实现你的c语言代码了
比如我就在里面写了:
#include
"com_example_ios_studentday07_MainActivity.h"
//#include <android/log.h>
//#define LOG_TAG "System.out"
//#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#pragma clang diagnostic push
#pragma ide diagnostic ignored "CannotResolve"
//#define LOGINFO(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
JNIEXPORT jstring JNICALL Java_com_example_ios_studentday07_MainActivity_getString
(JNIEnv * env, jobject obj){
// LOGINFO("LOGINFO");
return
(*env)->
NewStringUTF
(env,
"NDK 测试成功"
);
}
#pragma clang diagnostic pop
然后,现在流程差不多了.
第七步:
你想要运行起来,现在还不行咯
你需要在你的Module下面写上这样的一些东西,虽然我也不懂:
第八步(最后一步):
需要在事先在加载你刚才创建的.so库:
比如我这个demo中:
static
{
System.
loadLibrary
(
"MyJni"
);
}
最后你的MainActivity中写代码吧!!