Android的学习之路一
在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下进行开发,还是有点小慌的,加油以及睡觉)
Android的学习之路一的更多相关文章
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android开发学习之路--基于vitamio的视频播放器(二)
终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...
- Android开发学习之路--Android Studio cmake编译ffmpeg
最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...
- Android开发学习之路--网络编程之xml、json
一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...
- Android开发学习之路--Activity之初体验
环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...
- Android开发学习之路--Android系统架构初探
环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...
- Android开发学习之路--MAC下Android Studio开发环境搭建
自从毕业开始到现在还没有系统地学习android应用的开发,之前一直都是做些底层的驱动,以及linux上的c开发.虽然写过几个简单的app,也对android4.0.3的源代码做过部分的分析,也算入门 ...
- Android开发学习之路--Content Provider之初体验
天气说变就变,马上又变冷了,还好空气不错,阳光也不错,早起上班的车上的人也不多,公司来的同事和昨天一样一样的,可能明天会多一些吧,那就再来学习android吧.学了两个android的组件,这里学习下 ...
- Android破解学习之路(十四)——【Unity3D】王牌大作战破解
一.前言 今天带来的是王牌大作战的破解教程,游戏下载的话,我是直接去TapTap官网下载的 支付宝内购破解用老套了,今天学点破解的新花样吧!! 二.支付宝内购破解 支付宝的内购破解已经很熟悉了, 直接 ...
随机推荐
- ubuntu16.04 无法wifi链接一段时间掉线且无法再连接
ubuntu16.04 无法wifi链接一段时间掉线且无法再连接,从网上搜索的确认这个一个bug. 解决方法: 1.Get details of your PCI wireless card by r ...
- JS 手札记
addEventListener中的事件如果移除(removeEventListener)的话不能在事件中执行bind(this)否则会移除无效! // selectCurrent() // copy ...
- JQ绑定事件的叠加和解决,index()方法的坑
JQ绑定事件的叠加和解决,index()方法的坑 前言 在做过几个不大不小的项目后,发现技术这种东西,必须要多多实践,才能发现各种问题,理论的知识掌握的再好终究是纸上谈兵. 因此目前感觉有两点是必须要 ...
- STlink下载和打断点Debug调试小结
一.下载 1.检查设备是否选择正确 2.检查SWDIO有没有识别到,如果没有,检查硬件连线是否正确. 3.检查Utilities选项 4.点击settings,添加FLASH. 二.Debug调试 前 ...
- UI自动化测试框架 ---TestCafe
UI自动化测试框架 ---TestCafe 官网文档链接: https://devexpress.github.io/testcafe/ https://devexpress.github.io/te ...
- poj1737-----这题有毒
这题有毒,不取模还会溢出,我哭了 <进阶指南>p337动态规划 公式就是个这了,代码就不贴了,反正是错的,用java算了
- Redis远程连接报错解决
今天测试了一下在本机(win10系统)远程连接 centos下的redis,结果报了以下错误: Exception in thread "main" redis.clients.j ...
- Codeforces Round #519 by Botan Investments(前五题题解)
开个新号打打codeforces(以前那号玩废了),结果就遇到了这么难一套.touristD题用了map,被卡掉了(其实是对cf的评测机过分自信),G题没过, 700多行代码,码力惊人.关键是这次to ...
- 7.netty内存管理-ByteBuf
ByteBuf ByteBuf是什么 ByteBuf重要API read.write.set.skipBytes mark和reset duplicate.slice.copy retain.rele ...
- HBase学习笔记(四)—— 架构模型
在逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列. 但从 HBase 的底层物理存储结构(K-V)来看,HBase 更像是一个 multi-dimensional m ...