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官网下载的 支付宝内购破解用老套了,今天学点破解的新花样吧!! 二.支付宝内购破解 支付宝的内购破解已经很熟悉了, 直接 ...
随机推荐
- win10 uwp 录制任意应用屏幕
在 1803 可以使用 Windows.Graphics.Capture 捕获屏幕,可以用来录制应用的窗口 通过 CompositionAPI 和 win2d 可以作为 D3D 绘制,通过 Direc ...
- supported platform
Target name Platform Architecture Endianness Developer(s) Known Issues/Notes adm5120 Infineon/ADMtek ...
- P1919 FFT加速高精度乘法
P1919 FFT加速高精度乘法 传送门:https://www.luogu.org/problemnew/show/P1919 题意: 给出两个n位10进制整数x和y,你需要计算x*y. 题解: 对 ...
- 红米K20 Pro 传感器失效解决方案
最近把Redmi K20 Pro升级到了安卓Q,用了几天,不好用,总是提示屏幕前方有遮挡,于是刷回了安卓9,但是发现重力感应传感器失效了,屏幕不会随这方向转,导航的时候看起来很难受. 网上查了一下,要 ...
- Android1_运行第一个AS项目HelloWorld
一.开发安卓程序需要具备一些开发工具,这里简单罗列一下: JDK :这是Java语言的开发工具包,包含了Java的运行环境.工具集合.基础类库等内容. Android Studio:目前主流的安卓开发 ...
- HDU4528 小明捉迷藏 [搜索-BFS]
一.题意 小明S在迷宫n*m中找大明D和二明E,障碍物X不能走,问你计算是否能在时间t内找到大明和二明 二.分析 2.1与普通的BFS不同,这里可以走回头路,这里应该建立四维的标记数组标记数组,例如v ...
- javaweb项目添加log4j日志
谈到我们在Java程序中经常用的日志,Log4j应该是耳熟能详了.这里先提下slf4j,英文全名是Simple Logging Facade for Java,直面意思是:Java的简单日志门面.sl ...
- Linux忘记root密码后如何在grub界面中以单用户模式进入系统并重置密码的方法
本文将介绍在Linux系统中忘记root用户密码的情况下,如何在gurb界面进入单用户模式并重置root用户密码.在单用户模式下,用户不需要输入任何密码即可进入系统并可以修改密码.实验步骤如下: 1. ...
- `docker数据持久化volume和bind mounts两种方式
将数据从宿主机到容器的三种方式: ,volumes:docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)保存数据的最佳方式 ,bind mounts 将宿主机上的任 ...
- 机器学习-Pandas 知识点汇总(吐血整理)
Pandas是一款适用很广的数据处理的组件,如果将来从事机械学习或者数据分析方面的工作,咱们估计70%的时间都是在跟这个框架打交道.那大家可能就有疑问了,心想这个破玩意儿值得花70%的时间吗?咱不是还 ...