题外话
先说下做这件事的初衷,领导打算搞前后端的自动化部署打包,本来后端就是用rundeck 自动化部署的,如果把android项目的pull代码,编译,打包,自动上传到服务器也都整成流水线的形式,就需要在服务器上配置下android的环境了,不需要开发,android studio 或者idea intellij就不需要了,但为了能编译:sdk,ndk,jdk,gradle,git等东西还是得装。
在安装环境的时候我必然先查阅下相关资料,看看有没有其他小伙伴有经验,但是参考的相关文章太多,不够综合,遇到了很多问题,我还是把自己总结的发出来,供大家参考。
先从某百科上粘贴下概念,什么是centos?
CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。
搭建环境
为了不直接在服务器上部署时出现大问题,我先在本机环境(mac)上进行测试,安装了virtual Box模拟器,下载了个ova格式的CentOS镜像文件直接使用。
virtualBox比较好找,我就只附个centos镜像下载地址吧:
centos下载
我下载的是7.1版本
启动centos
简略virtualBox导入镜像文件的过程,只是注意上边的地址里已经标明了默认用户的密码root/reverse,如果你下载了带gnome界面的版本,也可以不用管它,桌面上右键打开命令行,因为我们真实服务器上是没有界面的,只是为了模拟这个过程,顺便回忆下Linux命令
在mac上远程登录centos
因为虚拟机内速度较慢,并且如过用到了鼠标操作再切回自己的主机需要按住command 键,鼠标才能回来,比较麻烦,效率也低,所以我们直接在自己的mac电脑上远程操作centos,窗口大小也可以随意控制。
先在centos上输入命令查看ip地址:
ifconfig复制代码
结果为:
现在打开你的mac终端输入
ssh [email protected]复制代码
然后回车会提示输入密码,密码在下载页面上,上文提到了,是:reverse,然后回车你就远程登录了centos,然后最小化virtualBox和centos界面,剩下的就在你的终端上操作就可以了。
注:1 设置virtualBox的时候要设置网卡为桥接模式,不然有可能你会远程登录失败
2 假如你开机后登录的是非root账户,可以用
su root复制代码
来切换到root账户下,这样会减少一些权限上的麻烦,当然我们的前提都是模拟安装android环境,在真实场景中不要这么干
安装jdk
centos上一般会默认安装jdk,所以先查看下已安装的版本是不是你想要的
java -version复制代码
如果是的话,直接跳过这一节,否则可以继续往下看;
输入命令查看所安装JDK的包的情况,这一步是为了将你不需要的版本卸载干净
rpm -qa|grep java复制代码
结果可能是这样的:
javapackages-tools-3.4.1-6.el7_0.noarch
java-1.7.0-openjdk-headless-1.7.0.71-2.5.3.1.el7_0.x86_64
python-javapackages-3.4.1-6.el7_0.noarch
tzdata-java-2014i-1.el7.noarch
java-1.7.0-openjdk-1.7.0.71-2.5.3.1.el7_0.x86_64复制代码
因为我想要安装jdk8 ,所以先删除上边的东西:
sudo rpm -e --nodeps xxx xxx xxx xxx xxx复制代码
xxx是上边列出的五个文件名,中间用空格隔开;
查看你的centos具体版本,
uname -i复制代码
如果是x86_64那就是64位,如果是i386那么就是32位,然后去oracle官网下载对应版本
附oracle jdk地址:oracle
我是先在mac上下载好安装zip包,然后通过命令复制到centos上
scp jdk-8u144-linux-i586.tar.gz [email protected]:/你自定义的文件夹路径复制代码
注意上边的命令不是在远程登录的窗口上,你需要新开启个你本机的终端窗口,两个环境不要弄混
然后在cd到上述的路径下,unzip命令解压即可。
至于我为什么不直接在centos里下载,因为我不知道怎么获取jdk包的下载地址,通过在oracle官网上右键:复制出的下载地址其实是个网页,有会的朋友可以教我。
然后,配置你jdk8的环境变量,打开profile文件
vi /etc/profile复制代码
这个文件是系统级别的,所有账户都可以使用,然后将下列复制到这个文件末尾
#设置jdk环境变量
JAVA_HOME=/home/centos/Desktop/java/jdk1.8.0_144
JRE_HOME=/home/centos/Desktop/java/jdk1.8.0_144/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH复制代码
其中相应路径改成你自己的,然后esc,:wq退出
为了使用环境变量生效,输入:
source /etc/profile复制代码
然后再测试下
java -version复制代码
注:网上有的文章是安装的openJDK,据我后续操作的经验,最好不要安装 openJDK,android在openJDK版本环境下编译可能缺少部分文件,编译不通过,所以最好换成普通的jdk
附:关于openJDK和 普通JDK的区别
openJDK
安装SDK
新建个目录(随意,可以不建,只是为了便于管理你自己的文件),然后下载sdk包
mkdir android复制代码
wget http://dl.google.com/android/android-sdk_r24.0.1-linux.tgz复制代码
上边的wget是下载目录,后边跟上一个下载地址即可。如果下载缓慢你可能需要翻~~墙了,下载完毕后解压:
tar xvzf android-sdk_r24.0.1-linux.tgz复制代码
解压完毕别忘了删除压缩包,因为比较大,占空间,保留解压后的sdk文件夹就好了
rm -rf android-sdk_r24.0.1-linux.tgz复制代码
cd进入这个sdk目录,你可能发现没有platform-tools等相关文件,对,现在这个sdk就是个空壳子,连adb都没有,你需要手动更新,
插曲:你大概可能需要安装一些兼容库
在UI模式下运行,需要安装canberra-gtk-module
yum install libcanberra-gtk2复制代码
在64位的机器上运行android的工具需要安装一些32位的库:
yum install glibc.i686 libgcc.i686 libstdc++.i686复制代码
如果在安装libgcc的时候提示版本冲突,请更新系统:
yum update复制代码
如果在前面的安装中disable掉了/etc/yum.repo/CentOS-Base.repo,升级的时候需要恢复它,或用
yum -c yum_repo_file复制代码
加上这个库。
现在cd进入sdk/.../tools 目录下,我们要模拟sdk manager进行sdk的更新了,因为没有图形界面,只能用命令行:
执行
./android list sdk --all复制代码
这个目录就是列出所有的sdk,build-tools,source等文件,同样可能需要翻~~墙,下图为结果
然后执行命令选择你想要的包进行安装,如果想安装多个,选择上图的序号,用空格隔开:
./android update sdk -u -a -t 1,2,4,6,8复制代码
然后经过漫长的等待,安装完毕
配置环境变量,方法同jdk
#设置android环境变量
export ANDROID_SDK_HOME=/home/centos/Desktop/android/android-sdk-linux
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ANDROID_SDK_HOME/tools:$ANDROID_SDK_HOME/platform-tools复制代码
然后测试下adb命令或android命令吧
安装ndk
因为我的项目中用到了jni,所以需要安装下
先上个官方地址:官方ndk
可以自己去找对想要的版本。
新建目录,然后下载ndk, 最后解压
mkdir ndk复制代码
wget https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip复制代码
unzip android-ndk-r15c-linux-x86_64.zip复制代码
我没有设置ndk的环境变量,暂时没用到。
安装gradle
下载
wget https://services.gradle.org/distributions/gradle-2.8-bin.zip复制代码
解压,配置,环境变量,不啰嗦了
安装git
yum install git复制代码
这个好,直接安装,环境变量都不用配置了
测试pull 代码,编译
环境大致搭建完成,如果想测试下的可以用github里的项目。
首先你有个github账号,登录,然后在centos里生成ssh key公钥
ssh-keygen -t rsa -C "[email protected]复制代码
一路回车,最后查看你的公钥:
cd ~/.ssh复制代码
ls复制代码
列出的文件后缀为pub的即你的公钥文件,打开它:
tail xxx复制代码
复制出来粘贴到你的github的 key设置里,然后你就可以clone 下你的项目,用gradle进行编译了
gradle build复制代码
问题
编译项目的时候我遇到了若干问题:
1 提示缺少对应的build-tools或者sdk版本,去上边找sdk的安装步骤,下载你缺少的组件
2 提示 You have not accepted the license agreements of the following SDK components
这是因为你下载的sdk目录下缺少授权文件,对比你本机的sdk路径下去生成:
在 sdk 根目录下建立文件夹licenses,文件夹下建立文件android-sdk-license,内容为:8933bad161af4178b1185d1a37fbf41ea5269c55复制代码
3 提示ndk not configured
我们平时的项目根目录下会有一个文件:local.properties
这个文件是android studio生成的,但我们现在没有安装as,只能自己手动创建了
cd 到project 根目录下,
touch local.properties复制代码
然后进入编译:
vi local.properties复制代码
内容去你平时项目里找,记得填写正确了sdk和ndk的路径
结尾
内容大概就是这么多,此文的目的只是为了介绍在没有界面的情况下如何搭建android环境,毕竟平时那些安装包都是android studio帮我们自动下载的,不熟悉Linux的同学会有些难受。
自动化部署的话也可以用到rundeck,这是个执行脚本的工具而已,将你的git pull,gradle build等相关命令写成shell脚本,然后用rundeck跑一遍就成了自动化部署,相关详细内容以后可以单独描述一篇。
另外,发现掘金的博客的书写方式居然是markdown 格式的,大赞,很方便。
最后附上我的github,欢迎捧场:
我的github