Mac构建Android多渠道自动化打包加固

  • A+
所属分类:CI/CD

现在开发使用本地电脑构建项目,为了提高开发同学效率,搭建Android自动化构建系统。

为什么使用Mac?

ios项目只能在mac os系统下构建,原计划使用黑苹果,但是系统不稳定。为了保证自动化构建系统的稳定性,申请采购一台Mac mini,作为android和ios的构建服务器。

Homebrew

Homebrew 是一款Mac OS平台下的软件包管理工具,类似于linux系统的YUM,拥有安装、卸载、更新、查看、搜索等很多实用的功能。

安装 brew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装 wget

sudo brew install wget

卸载 wget

sudo brew uninstall wget

查看安装软件

sudo brew search /apache*/

注意:/apache*/是使用的正则表达式,用/分割。

安装Java

默认安装最新java 12

brew  install java

安装java8

brew cask install homebrew/cask-versions/java8
java -version

Java多版本并存

打开~/.bash_profile,没有的话创建 

vim ~/.bash_profile 

#export JAVA_12_HOME=/Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
#export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/


#alias jdk12="export JAVA_HOME=$JAVA_12_HOME" #编辑一个命令jdk12,输入则转至jdk12
#alias jdk8="export JAVA_HOME=$JAVA_8_HOME" #编辑一个命令jdk8,输入则转至jdk8

export JAVA_HOME=`/usr/libexec/java_home -v 1.8` #使用jdk8
export PATH=$PATH:$JAVA_HOME/bin
/usr/libexec/java_home -V #列出所有版本java

重载环境变量

source ~/.bash_profile
java -version

安装Jenkins

第一种方式:通过官网下载pkg安装包(不推荐)

启动 jinkens
sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

停止 jinkens

sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

第二种方式:使用brew安装

安装过程中,会提示获取密码文件,插件选择安装默认插件。

brew install jenkins(最新版)
brew install jenkins-lts(稳定版)
brew services start jenkins

安装android sdk

brew cask install android-sdk

默认安装位置

/usr/local/share/android-sdk

列出sdk版本

sdkmanager --list

安装指定版本

sdkmanager --install "build-tools;28.0.3"

可以看到已经安装成功

localhost:jdk1.8.0_202.jdk ops$ sdkmanager --list
Warning: File /Users/ops/.android/repositories.cfg could not be loaded.         
Installed packages:=====================] 100% Computing updates...             
  Path               | Version | Description                    | Location           
  -------            | ------- | -------                        | -------            
  build-tools;28.0.3 | 28.0.3  | Android SDK Build-Tools 28.0.3 | build-tools/28.0.3/
  tools              | 26.1.1  | Android SDK Tools 26.1.1       | tools/

卸载

#sdkmanager --uninstall 'build-tools;28.0.3'

安装其他组件

sdkmanager --install 'build-tools;28.0.3' "tools" "platforms;android-28" "platform-tools"

配置android 环境变量

vim ~/.bash_profile 
export ANDROID_HOME=/usr/local/Caskroom/android-sdk/4333796/
export PATH=$PATH:$ANDROID_HOME/build-tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/platforms
export PATH=$PATH:$ANDROID_HOME/tools

重载环境变量

source ~/.bash_profile

Jenkins 系统管理--系统设置-添加ANDROID_HOME

Mac构建Android多渠道自动化打包加固添加java 8环境变量

Mac构建Android多渠道自动化打包加固

安装gradle

brew cask install gradle

或者下载二进制文件安装

$ mkdir /opt/gradle
$ unzip -d /opt/gradle gradle-5.3.1-bin.zip
$ ls /opt/gradle/gradle-5.3.1
LICENSE  NOTICE  bin  getting-started.html  init.d  lib  media

配置SSH密钥

实现jenkins通过ssh密钥拉取git代码。

MAC运行jenkins的用户生成新的ssh密钥,我这里使用的是ops用户,一路回车

ssh-keygen -t rsa

查看生成的密钥文件

ls -l ~/.ssh/

公钥添加到gitlab

设置---ssh密钥

$ cat ~/.ssh/id_rsa.pub

私钥添加到jenkins

$cat ~/.ssh/id_rsa

Mac构建Android多渠道自动化打包加固

Jenkins添加项目

参数化构建,配置构建类型和渠道

Mac构建Android多渠道自动化打包加固

配置git

Mac构建Android多渠道自动化打包加固

构建执行shell

jiagudir='/opt/360jiagubao_mac/jiagu'
#channel='/opt/channel.txt'
#configdir="${WORKSPACE}/commonlibrary/src/main/java/com/showfitness/commonlibrary/http/"

#default config test2
#sed -i '' "s/NetConfigText2Iml/NetConfigText1Iml/g" $configdir/Config.java


#build android
cd show
/opt/gradle/gradle-4.6/bin/gradle clean assemble${productFlavors}${buildTypes}

#360加固初始化
#java -jar $jiagudir/jiagu.jar -login 185006 liuyalei
#java -jar $jiagudir/jiagu.jar -importsign ${WORKSPACE}/show_keystore.jks 123456 test 123456
#java -jar $jiagudir/jiagu.jar -showsign
#java -jar $jiagudir/jiagu.jar -importmulpkg $channel
java -jar $jiagudir/jiagu.jar -showmulpkg

#360加固
cd ${WORKSPACE}/show/build/outputs/apk/${productFlavors}/${buildTypes}/
java -jar $jiagudir/jiagu.jar -jiagu ./*.apk  ./ -autosign -automulpkg


#scp apk
apkdir="${WORKSPACE}/show/build/outputs/apk/${productFlavors}/${buildTypes}"
scp $apkdir/*_sign.apk  root@192.168.0.210:/data/xjs-app/${JOB_NAME}
echo "下载apk地址 http://app.test.com/${JOB_NAME}"


#scp apk oss
cd $apkdir
apk=$(ls *官网_sign.apk)
/opt/ossutilmac64 cp $apk oss://test/apk/ -r -f -u
echo "阿里云oss下载地址 http://test.oss-cn-hangzhou.aliyuncs.com/apk/$apk"

Mac构建Android多渠道自动化打包加固

添加Jenkins普通用户

Mac构建Android多渠道自动化打包加固

开启Nginx目录访问

注意配置字符集utf-8,否则中文会乱码

[root@jenkins conf.d]# cat app.test.com.conf 
server {
    listen   80;
    server_name app.test.com;
    
    location / {
          root /data/xjs-app/;
          sendfile on;
          autoindex on;
          autoindex_exact_size off;
          autoindex_localtime on;
          charset utf-8;

    }

}

Mac构建Android多渠道自动化打包加固

总结

1、默认gradle会打包所有渠道apk,测试的时候非常浪费时间,可以通过参数化配置,指定渠道和版本打包,命令格式如下:

gradle clean assemble+配置名(首字母大写)+buildTypes名(首字母大写)

gradle clean assembleQinghuaRelease

2、加固详细使用,可以参照《360加固助手使用手册》,automulpkg自动打包所有渠道,也可以-pkgparam自定义渠道

java -jar $jiagudir/jiagu.jar -jiagu ./*.apk  ./ -autosign -pkgparam $channel

3、Mac系统sed替换配置文件,需要注意''指定备份文件,否则会报错

configdir="${WORKSPACE}/commonlibrary/src/main/java/com/tset/commonlibrary/http/"
#default config test2
sed -i '' "s/NetConfigText2Iml/NetConfigText1Iml/g" $configdir/Config.java

4、多渠道打包配置示例:

vim channel.txt
UMENG_CHANNEL 百度手机助手 baidu
UMENG_CHANNEL 91手机商城 91
UMENG_CHANNEL 豌豆荚 wandoujia
UMENG_CHANNEL 小米 xiaomi
UMENG_CHANNEL 华为 hw
UMENG_CHANNEL 安智 anzhi
UMENG_CHANNEL 魅族商店 meizu
UMENG_CHANNEL oppo手机 oppo
UMENG_CHANNEL vivo手机 vivo
UMENG_CHANNEL 腾讯应用宝 yingyongbao
UMENG_CHANNEL 官网 guanwang
UMENG_CHANNEL 安卓 anzhuo
UMENG_CHANNEL 360应用平台 360

5、配置build.gradle自动V1/V2签名

android {
    signingConfigs {
        release {
            keyAlias '******'
            keyPassword '******'
            storeFile file('../release.keystore')
            storePassword '******'
 
            v1SigningEnabled true
            v2SigningEnabled true
        }
    }
 
    ......

参考文档

https://www.jianshu.com/p/90dc2f8083be

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: