前面从全局和整体角度看了下Android包含哪些东西,自然,也涵盖了开发需要了解的内容,具体参见博文:从技术角度看Android大系统的构成_龙赤子的博客-CSDN博客
写完博文,感觉对Android开发也胸有成竹了,于是就决定对现有应用做一番修改。
知之非艰,行之惟艰,世间万物莫不如是。等到博主实际上手开工时,才发现无从下手。不过话说回来,对于“怎么吃掉一头大象”,哲人已有答案,那就是一口一口吃。我想,对于一个大系统的开发,自然也是这个理。那就先梳理思路,从搭建环境开始吧。
目录
一 准备过程:
二 根据调试目标,先了解NDK
三 Studio
四 SDK下载
五 安装虚拟机
六 搭建工作环境
1.搭建Samba 服务器:
2.释放开发包:
七 下载代码,准备编译
1.下载应用源代码
2.配置Android 的环境变量 ,参考已有版本。在/etc/profile文件中完成
3.准备编译工具
八 代码编译
九 下一步,调测程序
十 补充工程工具的问题
十一 补充SDK内容的问题
一 准备过程:
现在Android已经比以前完善了很多,这也包括文档部分。官方文档首页:https://developer.android.google.cn/docs。从官网上可以看到,文档包含了很多内容。可以说,你需要的基本都在上面。目前个人感觉缺少的就是初学者的入门路线图。这就好比去逛一个很大的景区,不熟悉的人希望有一个欧拉回路,能让自己做到不重复路线、不浪费时间,又能不漏掉景点;而对于常来之人,可能直达自己感兴趣的目的地才是首选。所以,有时候多也就意味着少。
具体来讲,文档包括了:
- 发布版本:各个版本及其特色。目前已经更新到Android13了。
- IDE(Android Studio):介绍IDE的下载、使用。包括工程的创建、迁移、导入等。在之前,我记得这些都是大家零碎整理的博客。官方很少见详细的说明。当然,也可能是我记错了。
- NDK:底层原生开发工具和环境的说明。介绍了版本的变迁、变化等。
- SDK:上层框架和Java层API的环境和相关开发工具。
- 开发主题:关于新功能新特性的说明。
- Kotlin:新的开发语言。
- 示例:一些开发视频和教程。
文档完善是个好事,但是多了有个问题,就是容易抓不住重点,找不到需要的内容。复杂的事物都是这样,慢慢习惯。
二 根据调试目标,先了解NDK
NDK 文档
https://developer.android.google.cn/ndk/guides
NDK 下载
https://developer.android.google.cn/ndk/downloads/older_releases#ndk-17c-downloads
android {
ndkVersion "17.2.4988734"
}
三 Studio
https://developer.android.google.cn/studio/projects/install-ndk
四 SDK下载
现在官方不再单独提供SDK的下载,而是绑定到了Studio中。关于在Studio中下载SDK的方法,后面再补充。
也可通过其他途径下载:
https://www.androiddevtools.cn/
但是版本也都比较老。另外,解压缩后,无 platforms,需要再单独下载,比较麻烦。
五 安装虚拟机
使用Virtual box 报 0x00000000地址不可写错误。网上查找说是Win7破解版需要更新主题。因为电脑一直比较稳定,不打算替换。放弃该方案虚拟机。
换用Vmware Workstation. Player16及以上版本,要求Win8及以上系统,放弃,继续使用老的Workstation。
Ubuntu使用了较新的20大版本。
安装成功后,Security Crt ssh连接提示密钥交换错误。这是因为Ubuntu更新的原因。按网上方法,添加对旧加密方法的支持。具体来说,错误如下:
Key exchange failed.
No compatible key exchange method. The server supports these methods: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256
使用Xterm工具连接成功。根据如下网站信息,更新 ssh配置后,Security Crt ssh登录成功。我本人执着于Security Crt主要是多个窗口切换比较方便,习惯了。
https://www.modb.pro/db/382057
安装32位的库,方法来自Android 官方文档的说明。(好像是安装Linux版本的Studio所需)
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
六 搭建工作环境
1.搭建Samba 服务器:
下载 Samba软件
修改配置文件
重启smbd服务。方法见网络
2.释放开发包:
拷贝NDK压缩包,解压到工作目录。下面所述是在Linux虚拟机里搭建Android编译环境。主要是因为要编译老代码。如果是新开发,可以在Windows下使用Android Studio,一站式解决。
七 下载代码,准备编译
1.下载应用源代码
2.配置Android 的环境变量 ,参考已有版本。在/etc/profile文件中完成
需要Java 环境变量
需要Ndk 环境变量
需要SDK 环境变量
3.准备编译工具
考虑到下载的SDK只是一个框架,内容框架,很多内容,包括platforms等需要再单独下载。而现在,Android已不再单独提供这些包的下载。相关内容已经嵌入到Android studio里面,需要通过该工具来下载。于是,先下载Studio,安装后看。
如果可以通过Studio下载成功,则再从Studio安装目录中提取出来使用。或者使用command tools 方式,Android提供通过命令行的方式来下载上述包。或者第三种方式,就是快速的将原来的包拷贝过来,测试用看看。
这里选择第三种方式。最后,拷贝Ant构建打包工具。至此,环境构建完成。
八 代码编译
环境构建好后,编译看效果。具体过程略。
九 下一步,调测程序
具体内容略。主要涉及多个NDK版本的尝试,开发环境Eclipse和Android Studio的切换等。
十 补充工程工具的问题
中间用Studio调测后,回到Eclipse,结果工程不能用了。
首先是打开Eclipse,弹出框提示Failed to get the required adt version number from the sdk
之前从来没有遇到这个问题
继续编译工程时,IDE工具下面的信息框提示Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!
提示有错误,需要先处理错误。
clean工程后,继续尝试,问题仍然存在。
关闭Eclipse后再打开尝试,问题仍然存在。
关机重启,打开Eclipse尝试,问题仍然存在。
到此,基本确定工具环境有问题了。
网上搜了一些资料后,提示说跟Studio升级工具有关。
回想了一下,的确,在用Studio验证弹框问题时,顺便升级了几个SDK版本和build tools。
我估计问题跟升级build tools有关。另外,SDK目录下的SDK Manager可执行程序点击运行没反应,而其他版本SDK目录下的则不存在该问题。
分别检查了下Eclipse和Studio的SDK目录,发现两个用了同一个目录。因此,Studio的工具和SDK版本升级操作,肯定是影响到了Eclipse对相关工具的使用。
Eclipse应该是要低版本的工具和SDK。
于是,单独为Eclipse构建了一个低版本的环境,再次打开Eclipse,进入到工具栏的window->preference里面,指定Android项目的路径。
执行Apply,重新编译,通过。问题解决。
看来以后Studio和Eclipse就要各自用各自的SDK了。Eclipse下的目前暂时避免升级,以免带来意外的问题。
十一 补充SDK内容的问题
关于SDK中包含的内容,进行补充。
可以通过Studio看到,主要有两部分,一部分是平台包,一部分是工具。
平台包好理解,包含了各个Android版本的支持包。右边显示是否已安装。每一个平台的包里有那些东西,我们点开右下角的Show Package Details,就可以看到更详细的信息。
这里,我们选取一个最多的看看。
首先是SDK本身,里面包含了大量的支持jar包,我们编写应用的组件级支持就在这里,否则编译时就会找不到相关类和接口。
其次,有部分源码。以前的版本还有例子代码,后来google把例子移走了。可能官方文档里可以找到,不过不是很确定。
再次,就是支持该级别API的各种类型产品的镜像包。区分了不同的平台。这些是模拟器运行的基础。
最后,就是Google的API和带Google本身提供的一些API的镜像。
看完平台包,我们再看看SDK工具集。
首先是构建工具。这个看着是跟API版本走的。
其次,CMake,就不用多说了。
再看,东西不少。模拟器,命令行工具,布局解释器,NDK包,文档,平台工具,SDK工具。这几个工具,单从名字上看,都分不清是做什么用的。这还没完,继续往后看,还有
例子程序,支持库等比较杂的东西。
作为开发者,我们并不是要去详细了解这里的每一个都是干什么用的。技术层面来讲,了解其中的部分就可以了,主要是有一个直观的感受。从学习角度来看,要在心里清楚,我们开发的一个个APP就如同构建和装饰的一个个房间,是在别人大量而又复杂的工作基础上展开的。虽然不用实现地基和骨架的事,但不能觉得没有这些事。