在CentOS上全命令行搭建android编译环境

题外话

先说下做这件事的初衷,领导打算搞前后端的自动化部署打包,本来后端就是用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 root@192.168.1.104复制代码

然后回车会提示输入密码,密码在下载页面上,上文提到了,是: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 root@192.168.1.104:/你自定义的文件夹路径复制代码

注意上边的命令不是在远程登录的窗口上,你需要新开启个你本机的终端窗口,两个环境不要弄混

然后在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 "your_email@youremail.com复制代码

一路回车,最后查看你的公钥:

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

转载于:https://juejin.im/post/59cce334f265da065e324f8b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值