在Android的道路上越走越远==,本着一颗童心去学习,没想到最后会成为自己的职业。看到过知乎上写的,并不是兴趣使比尔盖茨以及乔布斯他们成就斐然,而是他们真正的牛逼使得即使买大饼也能成为世界首富。然而如果没有兴趣他们也不会寻求这一条路,现如今自己缺少的不是兴趣和激情,而是对代码对程序的积累,也就是实力的差距,希望能够通过一点一点的进步缩短实力的差距。程序员是需要不断反复思考积累的,仅仅写在这里对自己每天的学习有一个过程的了解。
学习之前不得不说的便是Android开发环境的搭载,在这里,我们不仅仅需要Java较为灵活方便的界面开发技术,也需要C以及C++的高效简洁。(其实本人更喜欢C,Java的确实大大方便了开发,然而写多了感觉懒得写C了,因为Java什么都几乎封装好了,而C在研究算法和底层中比起Java更为清晰高效)。或许只是对C的钟情,也或许是对效率的考虑,这里我们也希望搭载C和C++的接口,来对Java进行一个相辅相成的作用。利用Java的JNI便可以实现这种方式。
OK,接下来我们来搭载JDK,SDK,NDK,Eclipse的开发环境。
1. JDK的搭建
Java Develope Kit的环境搭载是所有Java相关开发的基础,这里我们选择1.7版本的(官网上有1.8版本的可自行下载)。
系统环境的配置(可参考http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html)
这个网上有许多的例子可以查看,具体就是在系统属性里面修改环境变量。
1.1 新建环境变量JAVA_HOME,变量值填写jdk的安装目录(本人是 D:\Java\jdk1.7.0)
1.2 编辑Path环境变量的值,增加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
1.3 编辑ClassPath环境变量的值,增加.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
1.4 环境搭载测试,在CMD下输入Java -version以及Javac -version,查看输出是否正确。若正确则JDK环境搭载成功。
2. SDK的搭建
首先SDK可以去官网上下载,鉴于天朝的有为,可以选择FQ也可以用一些镜像网站下载,这里推荐一个网站(http://wear.techbrood.com/)里面有非常多的android资源也包括下面介绍的ADT的下载。
由于在开发中经常需要在命令行中输入一些常用的命令,比如adb的许多命令等等,所以也有必要将这些命令所在的目录写进Path中,以方便程序的调试。
2.1 新建环境变量SDK_HOME,将SDK的目录填写入
2.2 编辑Path环境变量的值,增加%SDK_HOME%\platform;%SDK_HOME%\platform-tools;
2.4 环境搭载测试,在CMD下输入adb,查看输出是否正确。若正确则JDK环境搭载成功。
3. NDK的搭建
和上面JDK以及SDK差不多==,理解就好~~~
4. Eclipse的环境搭建
这是所有环境的结局楼,如果上述JDK和SDK以及NDK均OK了,那么进入这一步,将所有的工具路径完善到Eclipse中。
5. JNI的检查是本次的重点介绍
5.1 Android的项目新建
首先新建一个Android的项目
5.2 然后再Android的工程上右键点击Android Tools->Add Native Support并给.so文件取个名字。这时候工程就会多一个jni的文件夹,jni下有Android.mk和XXX.cpp文件。Android.mk是NDK工程的Makefile,XXX.cpp就是NDK的源文件。
JNI接口的命名规范是:Java + 调用该方法的包名类名 + 方法名,对于实例方法,有两个参数是必要的,一个JNI的环境指针JNIEnv *,另一个是调用该方法的Java实例jobject
#include <jni.h> #include <string.h> extern "C" _jstring* Java_com_cgf_helloworldndk_MainActivity_jniTest(JNIEnv* env,jobject thiz) { return (env)->NewStringUTF("hello from jni by ndkTest!"); }
5.3 加载XXX库
使用ndk库必须在static代码块里面用System.loadLaibrary加载.so库
public class MainActivity extends Activity { static { System.loadLibrary("my-ndk"); } // 声明JNI层的原生方法,使用native关键字 public native String stringFromJNI(); private TextView textView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.textView); textView.setText(jniTest()); } }
5.4 遇到Unable to launch cygpath. Is Cygwin on the path?错误,解决办法如下:
5.4.1 工程右键,点Properties->C/C++ Build的Building Settings中去掉Use default build command,然后输入${NDKROOT}/ndk-build.cmd
5.4.2 在C/C++ Build中点击Environment,点Add...添加环境变量NDKROOT,值为NDK的根目录
尝试一下吧,在View内会看到所写的C代码已经被成功调用了。
终于完成了,虽然简单,但是一步一步下来,不要犯错也很重要的,去搭建自己的开发环境吧~~~(困死的程序员,据说要在Linux下进行开发,还是有点小慌的,加油以及睡觉)