jenkins构建android app

一 、前言

        目前遇到一个应用场景,一些测试的功能还在测试APP中,所以需要使用测试APP,但是平时需要用到正式的APP,由于正式和测试APP包名冲突,导致经常需要来回卸载安装,非常麻烦。

         所以就想到使用jenkins来编译APP,将包名参数化掉,正式和测试APP使用不同的包名,就可以实现正式版和测试版APP在同一个手机上共存了。没用过jenkins,也没编译过android,不过同事都比较忙 ,只能自己硬着头皮上了。这里做个记录。

        参考:
        https://blog.youkuaiyun.com/zhuyb829/article/details/78899465
        https://www.jianshu.com/p/dc78cbf5080d

二、准备工作

        jenkins已经部署好了,只要用就行了~

        APP源码也已经上传到git上了,已经做好了参数化 ,拉取就行了。

三、正式开始编译

        本次编译参照了bear_android的攻略,附上链接:https://www.jianshu.com/p/dc78cbf5080d

四、编译中踩过的坑

        重点记录下踩过的坑,各种坑各种解决不掉/(ㄒoㄒ)/~~

1、找不到android sdk

    错误提示:The SDK directory '/var/lib/jenkins/workspace/xxxxxx /C:\xxxx\Android\Sdk' does not exist.

  1)jenkins中配置的环境变量ANDROID_HOME没发挥作用

        原来源码中SDK路径写死了路径,导致jenkins中的ANDROID_HOME没有发挥作用。

        解决方案:修改local.properties文件,注释sdk.dir就好了,默认就变成使用ANDROID_HOME的环境变量了。需要协调研发人员将这个配置改为环境变量。

  2)SDK目录不存在

        错误提示:> The SDK directory '/root/android-sdk-linux/SDK' does not exist.

        多次确认这个目录是存在的,但是就是提示路径不存在,jenkins中使用的也是root账号了。

        解决方案:将文件复制到jenkins目录下,重新配置环境变量(包括 jenkins和linux的环境变量)

2、android sdk licences have not been accepted

        错误提示:Caused by: org.gradle.api.GradleException: Failed to install the following Android SDK packages as some licences have not been accepted. platforms;android-28 Android SDK Platform 28 build-tools;27.0.3 Android SDK Build-Tools 27.0.3

        解决步骤:

1)安装指定的build tool

       解决方案:需要使用sdkmanager安装build tool
       参考:https://blog.youkuaiyun.com/weixin_43819222/article/details/90692598

2)/tools/bin/下面找不到sdkmanager

        解决方案:到tools执行          # sudo ./android

        结果遇到了下文3、4问题,依次解决 ,发现必须支持UI,原来的putty不支持,改用XManager。

        先启动Xmanager - Passive,再启用XShell,根据Xmanager - Passive的提示 :0.0

        执行:# export DISPLAY=本机ip:0.0

3)提示java环境错误

        错误提示:

./android: line 84: java: command not found
./android: line 94: java: command not found
./android: line 110: exec: java: not found

        排查发现java已经安装,java -version也正常,复制了其它的jar包也能够正常执行,就是执行 sudo ./android时会报错。

       找了很久没找到解决方案,最后偶然在某篇博文中找到了,但是链接丢失了,非常抱歉。

        解决方案:建立软连接,将java的目录连接到usr/bin下面去,不知道是什么原理。

        ln -s /xxx/jdk1.8.0_111/bin/java /usr/bin/java

        备注:删除链接

        rm -rf   symbolic_name  

        注意不是rm -rf   symbolic_name/

4)提示动态链接库 错误

       错误提示:

[root@localhost tools]# sudo ./android
Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3550 or swt-pi-gtk in swt.library.path, java.library.path or the jar file

        这个问题找了很久,好不容易找到资料:https://blog.youkuaiyun.com/lsylovezsl/article/details/94382971

        同样执行:ldd libswt-pi-gtk-3550.so

        

        可以看到少了这两个包,安装起来。

        安装libxtst:

        yum -y install libxtst

        安装libgtk2.0:

        yum -y install libgnomeui-devel

        yum -y install gtk2 gtk2-devel gtk2-devel-docs

        yum -y install gnome-devel gnome-devel-docs

        5)终于启动 ./android

 3、重启后jenkins数据全部丢失

        现象:jenkins重启后,进去发现被初始化了

        原因:jenkins的路径不是默认的/root/.jenkins,需要 重新配置环境变量

        解决方案:停止jenkins,配置环境变量JENKINS_HOME,路径为原来jenkins文件的路径,切记务必先停止jenkins。

        参考:https://blog.youkuaiyun.com/weixin_39517591/article/details/81781661

 4、找不到junit

        报错:error: package org.junit does not exist

        原因:没有安装junit,或者junit.jar不在classpath的环境变量里。

        解决方案:安装junit,并配置环境变量classpath,都试过了,还是不行,最后采取的方法,在gradle编译参数中添加-x test,跳过单元测试。

5、打包出来的release包安装提示没有证书

        排查:经确认/app/build.gradle文件中,已经包含了数字证书的相关配置,百度发现,需要增加一行配置,不清楚原理,参考:https://blog.51cto.com/fengwan/2286023

        解决方案:按照下土配置,增加signingConfig这一行。        

buildTypes {
        release {
            signingConfig  signingConfigs.release   #缺少这段,或者buildtypes在signingconfigs签名
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

至此终于结束了。

六、参数化构建 

        参数化构建,按照百度到的攻略,基本没遇到什么问题,就多级联动和git的参数化简单说下。

        如果希望多级参数联动,即选择某个参数(如编译环境选择测试环境或生产环境),其它参数跟着变化,需要安装Choice Parameter插件。切记有个小坑,referenced parameters一定要写,表明根据那个参数变化而变化。

        参考:https://www.jianshu.com/p/d4d9d60a3e53

        如果希望构建时手动选择git分支的,可以安装Git Parameter插件。

        参考:https://www.cnblogs.com/peng-lan/p/12001977.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值