#!/bin/bash
# 应用包 build apk script
# file name build-tencent.sh
# 使用说明
# 1.把全部打包资料都准备好放到一个目录里
# 2.把build.sh复制到这个目录里
# 3.用文本编辑器打开build.sh配置里面的信息
# 4.在当前目录下执行脚本
# ---------配置信息 BEGIN----------
# ---打包资源配置---
# 渠道名称
channelName="tencent_ysdk"
#当前目录
BASEDIR=$(dirname $0)"/"
# 游戏APK名字,注意不带后缀
gameApk="4252"
appName="风流霸业"
#填写versionCode要修改的值
versioncode="5"
#修改android api版本,看渠道是否要求上传api26以上,否则就填22即可
targetVersion="26"
baksmali="/Users/DexLin/Desktop/创思游戏/sdk/手游h5/纵剑仙界应用宝打包资料/ysdk_smail/baksmali-2.0.3.jar"
smali="/Users/DexLin/Desktop/创思游戏/sdk/手游h5/纵剑仙界应用宝打包资料/ysdk_smail/smali-2.0.3.jar"
# 游戏母包jar的名字
masterLib="csgame_sdk_h5_2.0.jar"
# 游戏母包渠道jar的名字
masterChannelLib="csgame_h5_ysdk_1.6.3.jar"
# android jar
androidSupportLib="android-support-v4.jar"
# 渠道必须的jar
channelLib1="YSDK_Android_1.6.3.jar"
#channelLib2="GDTActionSDK.min.1.6.3.jar"
#channelLib3="miit_mdid_sdk_v1.0.13.jar"
# buildconfig的jar
buildConfigLib="build-config.jar"
# dex2jar.sh 脚本路径
dex2jarPath="/Users/DexLin/Desktop/创思游戏/doc/dex2jar-2.0"
# ---签名信息---
keystoreFile="test.jks"
keyName="test"
keyPassword="123456"
# ---生成目录信息---
# 解压游戏jar的目录
gameJarDir="gameJar"
sdkJarDir1="sdkJarDir1"
# 解压的sdk jar目录
sdkJarDir="sdkJar"
# 最终打包生成的发布目录
apkReleaseDir="release"
# ---APK命名信息---
# APK最终包的名字
apkReleaseName=${gameApk}-${channelName}-signed.apk
# APK未签名的名字
apkUnsignName=${gameApk}-unsigned.apk
# ---需要复制的资源文件名,一般不需要改---
# jni文件
jniLibs="jniLibs"
# 资源文件
res="res"
# assets文件
assets="assets"
# ---------配置信息 END----------
# ---------FIELD BEGIN-----------
# ---------FIELD END-----------
# ---------METHOD BEGIN------------
# 创建目录
createDir(){
if [[ ! -d $1 ]]; then
mkdir $1
fi
}
# 反编译APK
decompileApk(){
apktool d -s -f $1
}
# 生成APK
buildApk(){
apktool b $1
}
# 顾名思义
dex2jar(){
${dex2jarPath}/d2j-dex2jar.sh --force $1
}
# 解压jar
unzipJar(){
jar xvf $1
}
#dex2smail $1输出smail文件夹 $2 dex文件
dex2smail(){
java -jar $baksmali -o $1 $2
}
#smail2dex $1 生成dex文件 $2 smail文件所在文件夹
smail2dex(){
java -jar $smali -o $1 $2
}
#$1 jar name,$2 目录路径
createJar(){
jar cvf $1 $2
}
# jar合并成dex
createDex(){
echo $1
dx --dex --output=classes.dex $1
}
# 签名
apkSigner(){
jarsigner -verbose -keystore $1 -storepass $3 -signedjar $4 $5 $2 -digestalg SHA1 -sigalg MD5withRSA
}
# 安装
installApk(){
adb install -r $1
}
# ---------METHOD END------------
# ----------CMD-----------
decompileApk "./${gameApk}.apk"
cp ./${gameApk}/apktool.yml ./
#dex2jar "./${gameApk}/classes.dex"
# ---解压Jar BEGIN---
createDir "$gameJarDir"
cd $gameJarDir
createDir "out1"
dex2smail "./out" "../${gameApk}/classes.dex"
cd ..
# ---解压Jar END---
# ---合拼Jar生成dex文件 BEGIN---
echo "build classes.dex"
createDex "$masterLib $masterChannelLib $channelLib1 $channelLib2 $channelLib3"
# ---合拼Jar生成dex文件 END---
# ---复制资料到游戏反编译目录 BEGIN---
dex2smail "./$gameJarDir/out" "./classes.dex"
mv -f ./$gameJarDir/out/android ./$gameJarDir/out1
mv -f ./$gameJarDir/out/com ./$gameJarDir/out1
mv -f ./$gameJarDir/out/org ./$gameJarDir/out1
smail2dex "./$gameJarDir/classes2.dex" "./$gameJarDir/out"
smail2dex "./$gameJarDir/classes.dex" "./$gameJarDir/out1"
cp -r -f ./$gameJarDir/classes.dex ./${gameApk}
cp -r -f ./$gameJarDir/classes2.dex ./${gameApk}
# 复制assets
cp -r -f ./${assets}/* ./${gameApk}/assets
createDir "$sdkJarDir1"
cd $sdkJarDir1
unzipJar "../$channelLib1"
cp -r -f ./assets/* ../${gameApk}/assets
cd ..
cd $gameApk
createDir "./lib"
cd ..
# # 复制jniLinbs
cp -r -f ./${jniLibs}/* ./${gameApk}/lib
# # 复制res
cp -r -f ./${res}/* ./${gameApk}/res
echo "info:开始合并清单文件"
#合并清单文件
java -jar mergeManifest_1.0.3.jar ./AndroidManifestMergeConfig/AndroidManifest.xml ./${gameApk}/AndroidManifest.xml
java -jar update_appname_1.0.0.jar ./${gameApk}/res/values/strings.xml ./${gameApk}/res/values/strings.xml ${appName} "app_name"
java -jar modify_versionInfo_1.0.0.jar ./apktool.yml ./${gameApk}/apktool.yml $versioncode $targetVersion
#复制清单文件到根目录以便查看
cp -r -f ./${gameApk}/AndroidManifest.xml .
echo "info:合并清单文件完毕!"
# ---复制资料到游戏反编译目录 END---
buildApk "./$gameApk"
cp ./$gameApk/dist/${gameApk}.apk ./$apkUnsignName
apkSigner "$keystoreFile" "$keyName" "$keyPassword" "$apkReleaseName" "$apkUnsignName"
createDir "$apkReleaseDir"
mv -f ./$apkReleaseName ./$apkReleaseDir
echo "build success"
echo "start install apk. waiting..."
installApk "./${apkReleaseDir}/${apkReleaseName}"
echo "删除没用文件"
rm -rf ./${gameApk}
rm -f ./$apkUnsignName
rm -rf ./gameJar