jenkins構建android app

一 、前言

        目前遇到一個應用場景,一些測試的功能還在測試APP中,所以需要使用測試APP,但是平時需要用到正式的APP,由於正式和測試APP包名衝突,導致經常需要來回卸載安裝,非常麻煩。

         所以就想到使用jenkins來編譯APP,將包名參數化掉,正式和測試APP使用不同的包名,就可以實現正式版和測試版APP在同一個手機上共存了。沒用過jenkins,也沒編譯過android,不過同事都比較忙 ,只能自己硬着頭皮上了。這裏做個記錄。

        參考:
        https://blog.csdn.net/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.csdn.net/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.csdn.net/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.csdn.net/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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章