Linux 环境打包安卓App实现以及使用

 

  • 目的

为了避免在windows端多用户同时登陆打包时的抢占断开连接操作,将安卓App打包环境在Linux环境下也配置一份,可以实现多用户同时打包互不影响。

 

  • 实现机制

将打包工具gradle , 安卓linux环境SDK,jdk, 签名key以及框架源码在Linux固定目录下配置好,然后编写脚本来实现流程操作:

  1. 获取命令行运行参数,例如项目名称,首页地址,app名称;
  2. 判断参数是否符合要求,否则退出;
  3. 拷贝源码放入使用当前时间命名的文件夹中;
  4. 对于拷贝源码中的首页地址,app名称信息进行替换;
  5. 编译;
  6. 将生成的apk拷贝到项目名称命名的文件夹;
  7. 删除因为编译而生成的整个目录的临时文件;

具体脚本代码如下:

#!/bin/sh

if [ $# -ne 3 ];then

echo "请输入正确的参数 1:项目名称 2:首页地址 3:App名称 "

exit 1

fi

project_name=$1

first_page_url=$2

appName=$3

 

tempDir=$(date "+%Y%m%d%H%M%S")

cp AppFramework/ ${tempDir} -R

echo "拷贝源代码结束."

 

sed -i "s/<string name=\"app_name\">.*<\/string>/<string name=\"app_name\">${appName}<\/string>/" ./${tempDir}/app/src/main/res/values/strings.xml

 

sed -i "s~<first_page_url url=.*\/>~<first_page_url url=\"${first_page_url}\"\/>~" ./${tempDir}/app/src/main/assets/app_config.xml

echo "替换app名称和首页地址结束"

 

cd ${tempDir}

../gradle-4.4/bin/gradle clean

../gradle-4.4/bin/gradle assembleDebug

echo "编译结束"

 

cd ..

rm -rf ${project_name}

mkdir ${project_name}

cp ${tempDir}/app/build/outputs/apk/debug/app-debug.apk ${project_name}/${project_name}.apk

echo "拷贝apk结束"

cd ${project_name}

output=`pwd`

cd ..

rm -rf ${tempDir}

echo "删除临时文件目录结束"

echo "生成apk目录位于${output},快去看看吧"

 

关于android 在linux 环境下的SDK 单独安装的问题说明一下:

1、去官网下载linux环境的的SDK安装工具包

https://developer.android.google.cn/studio

提供了独立于android studio ide 的单独安装包

2、进入tools/bin 目录,运行sdkmanager 命令, ./sdkmanager --list 会列出所有的需要安装的文件和版本:

 

3、根据 https://www.cnblogs.com/tsingke/p/9054044.html

     说明来选择安装下载文件,build-tool, platform, source 这三个应该是都要搞一个的,直接使用命令./sdkmanager "XXXX",

例如 ./sdkmanager "build-tools;29.0.1"

最终的目录结果如下:

 

Linux 环境部署

  为了避免其他用户在打包时对于编译环境的误操作破坏,所以不能给root账号来进行操作,需要新增其他账号来进行权限管理。关于Linux 新建用户和权限分组管理好久没有接触了,这个要追溯到七八年前刚毕业的时候,在第一家公司还是有弄过,现在对于概念还是有的,只是具体指令的用法早已经烟消云散,抛之脑后了,犹记得当年有一本 《鸟哥的私房菜》很受大家追捧,对于我们当时那帮初出校园的毛头小伙来说,算是一本绝好的步入工作的武林秘籍。

在新建用户的时候就遇到了第一个问题,将新增用户的登入目录设置到了root的子目录,导致使用ssh登录无法登入的问题,后来才明白/root目录应该就是root账号独有的目录,新增用户应该独立门户,自己在跟目录下新建一个,至少不能用到root目录下的目录。

useradd -d 分配目录 -m 用户

例如 useradd -d  /androidPack -m androidPack

passwd 设置密码

例如 passwd androidPack 123456

接着就是将某个目录分配给某个用户了,我这边的/androidPack 目录就专门为androidPack 而生,所以全给它了

chown -R user:group file一般为整个分配的目录

例如 chown -R androidPack:androidPack /androidPack

chmod 使用root账号给 ugo 分配权限

权限分配这个是最重要的, 对于ls 命令列出来的信息,要明白权限有三部分,文件拥有者,同一个分组,其他用户 三部分,

https://www.runoob.com/linux/linux-comm-chmod.html

我这边在搭建部署编译环境时都是在root账号下操作,因此文件拥有者就是root

因为这些文件都是root 创建的,虽然他们在/androidPack目录下,当然这个目录的拥有者还是androidPack 用户,但是这个用户和root用户又不在同一个分组group ,所以对于androidPack来说,他属于O,也就是others其他用户,权限就在第三部分,默认的是可读和可执行,即不能进行写操作,符合我们的需求。

通过命令cat  /etc/passwd  或者 cat /etc/group 命令可以查看各个用户的信息:

root:x:0:0:root:/root:/bin/bash

androidPack:x:1001:1001::/androidPack:/bin/bash

 

另外还有个需求就是部署环境的编译工具,SDK这些虽然一般不用动,但是框架源代码会需要更新,因此使用了Jenkins 来检测框架SVN 代码提交,自动拷贝更新的功能,所以需要对部署环境的源码目录有一个具有写入权限的用户,所以根据如上理解,新增了Jenkins用户,并且将其分组设置成和root同一个,然后将框架代码目录的权限第二部分中增加了写权限来实现此需求。

useradd -g root jenkins

passwd jenkins 123456

 

最终可以使用androidPack 安全愉快地打包apk, 使用jenkins账号及时地更新框架源码,以及多用户同时操作的效果,收工。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值