一个简单的功能,Linux服务器编译安卓代码的最基本环境

这篇文章的目的很简单,就是告诉大家怎么在Linux系统上去搭建一个可以去编译安卓代码使之成为apk安装包的环境,有人觉得这个功能很low,先不要着急发表意见,因为高级的后面还会继续推出。

另外,类似的文章也有很多,但是给人的感觉就像是跟着大神一行行敲代码结果大神成功了,而我却失败了,从而怀疑技能,怀疑人生。本文的宗旨,就是尽量保证跟着我走的人不会翻车,而且我尽量将步骤细节化,多的不敢保证,但是只要是和我的版本一样,至少也会让你跟我一起实现这样的功能,而不是中途翻车。(版本这个词很重要,因为很多人翻车的原因就是版本不一致)

活不多说,系好安全带,开始发车。

开发过安卓的同学们都知道,时下最主要的开发工具就是Android Studio,而AndroidStudio的编译工具就是Gradle,因此Gradle是必不可少的;另外Android开发所依赖的开发工具包也是必不可少的。现在就开始准备这两个东西。

 

SDK篇

因为是在Linux服务器上跑,索引windows的sdk肯定是没办法使用的,因此需要下载专门的sdk包

此处奉上传送门:https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip

cd /opt

切换到根目录下的opt目录(linux系统肯定会有这个目录的),至于别的目录,依据个人喜好

wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip

将文件下载到本地,万一说找不到wget命令,那就执行:

apt-get install wget (ubuntu)

yum install wget (CentOS)

不要问为什么不加sudo................

unzip sdk-tools-linux-3859397.zip

解压下载的zip包。(什么?找不到unzip?下载工具,代码参照wget的安装方式)

解压后竟然是tools,原谅我当时慌了,稍后告诉你们慌得理由

mkdir sdk
mv tools/ sdk/

创建一个sdk目录,然后将tools目录放在sdk中,至于说为什么这么做,稍后解释  (挖坑 #1)

vim /etc/profile

打开环境变量的配置文件,准备添加ANDROID_HOME 和PATH(如果提示找不到vim,也可以使用vi代替vim  或者是安装vim工具:参照安装wget工具)

export ANDROID_HOME=/opt/sdk
export PATH=${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}:${PATH}

在文件最后插入上面两行,然后保存( :wq ),就配置好了sdk的环境和path

source /etc/profile

这一段是使配置的环境变量生效,如果不写这句的话,重启系统也可以让环境变量生效(后面再执行该语句会用source一笔带过)

以上就是sdk的配置,当我满怀激动的敲:

sdkmanager --list

我去!!!

原来是没有安装JDK...............

关于jdk 个人是建议用原生的java 而不是open-jdk

JDK篇

下载地址

https://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html

去jdk官网下载 linux版 jdk

此处以linux x64位举例

这里需要注意,建议是希望下载到本地,然后再通过工具上传到服务器上去,而不是用wget命令,因为笔者在用wget命令下载的文件总是有问题的包,根本没办法安装,所以就直接下载到本地了然后上传了,当然也许你是超级幸运儿也说不定。

cd /opt

切换到/opt目录(这个无所谓,可以任意,主要的目的是要想尽一切办法把jdk的安装包放在你选择的目录)

tar -zxvf jdk-8u181-linux-x64.tar.gz

因为下载的是tar.gz的格式,所以就需要解压缩以及拆包

这个就是解压出来的文件目录

mv jdk1.8.0_181/ jdk1.8/

其实mv命令是移动文件的命令 ,但是用于改变文件(夹)的名称也相当好用

mkdir /etc/java
mv jdk1.8/ /etc/java/jdk1.8

创建/etc/java目录并将本地的jdk1.8的整个目录移动到/etc/java目录下(其实移动到哪里也无所谓,主要是环境变量的path指向jdk就好)

打开环境变量配置文件,然后修改 增加JAVA_HOME 和添加PATH

export JAVA_HOME=/etc/java/jdk1.8

export PATH=$PATH:$JAVA_HOME/bin

       将上面两句插入到文件底部,保存并且source

 

java -version

如果出现了版本信息,证明你的java是安装完成了,同时 sdkmanager也是能用了

 

sdkmanager --list

这时候再敲这个命令 如果出现了列表,证明sdk也是完成了

           

 

ps:各位读者,看到这里是不是感觉少点什么?容我挖个坑 #2

Gradle篇

写到这里下面要注意了 关于gradle的选择:

因为针对不同的项目,所用的gradle的版本是不一样的,而且涉及到在源码配置文件中不同的gradle插件与不同的gradle兼容性不一样,所以稳妥起见先看自己的源代码(别说你不用android studio):

先找一个在本地可以正常打包的apk源码(要是本地都不成功,那就是代码有问题了,服务器不背锅)

在代码gradle目录下的gradle-wrapper.properties文件,这个就是当前项目可以使用的gradle版本,我的版本是:gradle-4.6

各位读者,可以根据自己的项目找到属于自己Gradle的版本 ,然后去下载

(什么 找我要下载地址? 配置文件里面就是)

 

wget下载下gradle到/opt (不知道为什么我就对opt这么情有独钟)。

unzip gradle-4.6-all.zip

解压缩gradle(版本不一样代码不一样)

mkdir /etc/gradle
mv gradle-4.6 /etc/gradle/

创建/etc/gradle目录并且将gradle-4.6 移动到该目录下(根据版本来,不要盲目拷贝)

修改环境变量

export GRADLE_HOME=/etc/gradle/gradle-4.6  

export PATH=${GRADLE_HOME}/bin:${PATH}

在配置文件结尾插入上面两句,保存之后,source一下  (根据版本来,不要盲目拷贝) 

 

gradle -v

运行这一句,如果出现了gradle的版本信息,证明安装Gradle的工作算成功了

            

通过以上努力,终于是将整个的环境搭建完毕

Gradle 、sdk 、jdk都已经完成可以准备试运行了(为什么叫试运行?)

 

mkdir /code

将你的代码拷贝到这个目录下

cd SmartPermission2/

进入工程目录(根据你自己的项目来)

ls -l

首先看一下项目中是否存在我们常见到的build.gradle文件,如果有,就可以进行下一步了,否则项目是没办法编译的

另外在as拷贝的代码中还有一点需要注意 local.properties 文件必须删掉,这个是不同的系统关于本身的sdk和ndk的配置,如果不删掉,会对服务器的gradle造成干扰

 

gradle assembleDebug

在当前目录下运行gradle命令,这就是为什么要创建GRADLE_HOME 并且将这个路径下的bin加入path的原因

构建一个debug包..................

然后gradle就开始疯狂运行了...............激动!激动!

等待一段时间之后 出没出错?  反正我的是出了

 

填坑篇

先分析一下出错的原因

根据日志看大概有三点原因:(笔者的项目出现的版本问题,不代表各位看官的项目是同样的版本)

第一 没有 platforms;android-28

第二 没有构建工具 build-tools;28.0.3

第三 some licences 这个是一些许可文件(说实话这个在as工具开发很少碰到过)

看到上面两点,突然想起之前安装sdk只安装的tools,后面的就啥都没管,忘了吧(这是坑)

填坑  #2:

sdkmanager "platforms;android-28"

让sdkmanager安装28版本的platforms 

(这个命令是怎么来的?sdkmanager 就是之前的sdk的工具  ,后面的就是错误提示中的缺少的“platforms;android-28”,一组合就成了命令  sdkmanager "platforms;android-28" so easy是不是)

敲完命令之后会让你进行输入 敲y 然后回车(为什么要做这一步为什么是Y? 我再挖坑 ,大坑套小坑  #3)

sdkmanager "build-tools;28.0.3"

让sdkmanager安装28.0.3的 build-tools

 

填坑 #3 :

还记得构建失败的第三个原因嘛,缺少licenses许可。当你下载platforms的时候如果在这里敲了y,就会生成对应的许可,所以一般只要解决了前面两个问题,第三个问题迎刃而解。但是如果有人不想下载,而是通过拷贝的方式将platforms复制到sdk目录下,第三条的问题还会出现。这时候要运行一条命令

sdkmanager --licenses

等弹出要输入y 或者n的时候一律敲y 然后回车。这样就能生成所有的许可文件了。

 

填坑 #1 :

还记得下载tools后要保持/opt/sdk/tools这样的目录结构,并且设定ANDROID_HOME要设定为/opt/sdk目录这个坑吗?

这是因为在执行sdkmanager工具的时候安装的platforms,build-tools等组件和ANDROID_HOME无关,而是直接放在了tools的同一等级目录,但是在用gradle构建的时候却是要去ANDROID_HOME的路径下面找,

如果ANDROID_HOME指定的是别的路径,或者干脆就指向了tools目录,那明明下载完了组件,但是gradle工具仍旧找不到需要的组件。如果要解决这个问题,还要手动去将组件移动到ANDROID_HOME目录,这样就比较麻烦了。

所以将ANDROID_HOME 指向tools的所在目录是最环保的方式。

 

运行篇:

gradle assembleDebug

在代码的根目录下再次运行这个命令,等待一段时间...............................

突然一道绿光闪过

激动不激动,惊喜不惊喜?

cd app/build/outputs/apk/debug/

在代码的根目录下运行这条指令,在文件夹里面找到两个文件,就证明你成功了

当提示找不到该目录的时候,就说明你失败了

 

其实讲这么多,真正实现的功能是很简单的,就是安装了Gradle 、SDK 、JDK,并且设置了环境变量

之所以要用这么大篇幅讲这个东西,而且在解释命令行的时候也是啰嗦的不行,是因为这个实在是太基础了,而越基础的东西就越会出现无数的可能,jenkins需要用到这样的环境 ,gitlib-ci也会用到这样的环境,如果这个环境出现了事务,剩下的再高端大气上档次,也是白搭。

如果会有后续文章,至少在命令行的解释上不会下这么多功夫了。

以上。

 

附:Gradle编译安卓代码的一些简单的指令

gradle clean  清空编译时出现的缓存

gradle assemble   编译代码,并生成debug版本和正式版本apk

gradle assembleDebug  编译代码,并生成debug版本apk

gradle assembleRelease  编译代码,并生成正式版本apk

别问我怎么知道的,其实我也不清楚,

具体参照as

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值