找回密码
 立即注册
查看: 96|回复: 0

在 Linux 系统 编译APK 参考脚本

[复制链接]
  • 打卡等级:本地老炮
  • 打卡总天数:380
  • 打卡月天数:7
  • 打卡总奖励:1659
  • 最近打卡:2025-05-07 12:54:55

1138

主题

16

回帖

1154

积分

管理员

积分
1154
发表于 2025-4-7 06:47:20 | 显示全部楼层 |阅读模式
配合 Docker 镜像服务端使用效果更好


下载这个压缩包 https://cloud.189.cn/t/EZr6ZnFvARF3 (访问码:fo6m)

下载附件 MYapkTool.sh.zip (2.32 KB, 下载次数: 0)
#-------------------------------------------------------------------------------------------------------------------
在线一键使用

如果  apktool.jar Replacement.sh APK 都是在线下载
把附件解压出来 修改 MYapkTool.sh

找到 apk_name="xxx.apk"  xxx.apk换成你apk的名字 比如 123.apk
这个脚本 就可以这样用
yum install -y wget && wget http://xxx.xxx.xxx.xxx/MYapkTool.sh && bash MYapkTool.sh
#-------------------------------------------------------------------------------------------------------------------
本地使用
mkdir -p $HOME/apktool

解压MYapkTool2.2.2.zip把 apktool.jar Replacement.sh  APK 放到 $HOME/apktool
修改 MYapkTool.sh 找到 xiazai  注释掉 #xiazai
#-------------------------------------------------------------------------------------------------------------------

  • #!/bin/bash
  • # 闪烁之光 客户端 一键编译脚本
  • # 尤其证书文件 自动化脚本写不来 所以建议手动创建
  • # 123456是密码 创建证书密码 keytool -genkey -alias duke -keypass  123456
  • # 创建证书文件 KeyFileName.keystore
  • # 10000是证书文件过期时间 10000天
  • # keytool -genkey -v -alias KeyName -keyalg RSA -keysize 2048 -validity 10000 -keystore KeyFileName.keystore
  • #↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
  • mkdir -p $HOME/apktool
  • apktool_dir="$HOME/apktool"
  • #安卓包的名称
  • apk_name="xxx.apk"
  • #-------------------
  • # 判断Linux发行版
  • #-------------------
  • #cat /etc/os-release 第一显示的就是系统名称
  • abcde_a="NAME="Linux Mint""
  • abcde_b="NAME="CentOS Linux""
  • #显示第一行
  • osMY=`cat /etc/os-release | sed -n 1p`
  • if [[ ! X${abcde_a} = X${osMY} ]];then
  •    if [[ ! X${abcde_b} = X${osMY} ]];then
  •       echo "ERR当前系统${osMY}不适合运行该脚本已经停止运行"
  •       exit
  •    else
  •       echo "安装 openjdk8 expect"
  •       yum -y install expect java-1.8.0-openjdk*
  •       #------------------------------------------------
  •       JVM_Folde_NAME_CentOS(){
  •       #找出JVM的文件夹名称
  •       rm -rf /tmp/JVM_Folder_1688_1688.txt
  •       ls /usr/lib/jvm | sed 's/^ *//' | sed '/^[0-9]/d' | sed '/jre/d' > /tmp/JVM_Folder_1688_1688.txt
  •       cat /tmp/JVM_Folder_1688_1688.txt | grep "openjdk-1.8"
  •       }
  •       #------------------------------------------------
  •       export JAVA_HOME=/usr/lib/jvm/`JVM_Folde_NAME_CentOS`
  •       export PATH=$JAVA_HOME/binPATH
  •       export CLASSPATH=.JAVA_HOME/lib/dt.jarJAVA_HOME/lib/tools.jar
  •       export JRE_HOME=$JAVA_HOME/jre
  •    fi
  • else
  • echo "安装 openjdk8 apktool expect"
  • sudo apt-get install apktool expect openjdk-8-* -y
  •       #------------------------------------------------
  •       JVM_Folde_NAME_Mint(){
  •       #找出JVM的文件夹名称
  •       rm -rf /tmp/JVM_Folder_1688_1688.txt
  •       ls /usr/lib/jvm | sed 's/^ *//' | sed '/^[0-9]/d' | sed '/jre/d' > /tmp/JVM_Folder_1688_1688.txt
  •       cat /tmp/JVM_Folder_1688_1688.txt | grep "java-8-openjdk-amd64"
  •       }
  •       #------------------------------------------------
  • export JAVA_HOME=/usr/lib/jvm/`JVM_Folde_NAME_Mint`
  • export PATH=$JAVA_HOME/binPATH
  • export CLASSPATH=.JAVA_HOME/lib/dt.jarJAVA_HOME/lib/tools.jar
  • export JRE_HOME=$JAVA_HOME/jre

  • fi

  • #-------------------
  • # 远程下载
  • #-------------------
  • xiazai(){
  • echo "正在下载 反编译软件 安卓签名密钥 安卓客户端,请稍后......"
  • #把 apktool.jar xxx.apk Replacement.sh KeyFileName.keystore 放到这个路径 $HOME/apktool
  • cd ${apktool_dir}
  • wget http://192.168.1.10/apktool.jar
  • wget http://192.168.1.10/${apk_name}
  • wget http://192.168.1.10/KeyFileName.keystore
  • wget http://192.168.1.10/Replacement.sh
  • echo "已经结束下载!"
  • chmod -R 755 ${apktool_dir}/Replacement.sh ${apktool_dir}/apktool.jar
  • }
  • xiazai
  • sleep 1
  • #-------------------
  • # 编译安卓客户端
  • #-------------------
  • echo "正在编译安卓客户端请稍后......"
  • mkdir -p ${apktool_dir}/tmp
  • java -jar ${apktool_dir}/apktool.jar d -f "${apktool_dir}/${apk_name}" -o ${apktool_dir}/tmp
  • echo "编译结束"
  • sleep 1
  • #-------------------
  • # 修改反编译目录文件
  • #-------------------
  • xiugai_tmp(){
  • echo "正在修改安卓文件......"
  • #获取本机IP地址
  • Host_IP=$(ip addr|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}')
  • echo "${Host_IP}" > ${apktool_dir}/Host_IP.TXT
  • IPIPIPIP=$(cat ${apktool_dir}/Host_IP.TXT | sed -n 1p)
  • #你先看一下$HOME/apktool/tmp/assets/src/config.lua里的IP我这是 192.168.1.4
  • config_DIR_1="${apktool_dir}/tmp/assets/src"
  • cd ${apktool_dir} && ./Replacement.sh ${config_DIR_1} 192.168.1.4 ${IPIPIPIP%%/*}
  • #由于 ${apktool_dir}/tmp/AndroidManifest.xml 这个配置文件参数有问题
  • #在第二行的 <manifest>内的参数问题不能回编译成功 所以这个文件也要修改
  • ReplacedCharacter='<manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;  android:installLocation=&quot;auto&quot; package=&quot;com.sszg.bsxg&quot; platformBuildVersionCode=&quot;23&quot; platformBuildVersionName=&quot;6.0-2438415&quot;>'
  • #需要替换字符的目标文件
  • file_name=&quot;${apktool_dir}/tmp/AndroidManifest.xml&quot;
  • #需要查找的字符
  • key_value=&quot;package=&quot;com.sszg.bsxg&quot;&quot;

  •      changeFile()
  •      {
  •          declare -i nline
  •          getline()
  •          {
  •              #查找到特定字符的行
  •              cat -n $file_name|grep &quot;${key_value}&quot;|awk '{print $1}'
  •          }
  •          getlinenum()
  •          {
  •              awk &quot;BEGIN{a=`getline`;b=&quot;0&quot;;c=(a+b);print c}&quot;;
  •          }
  •          nline=`getlinenum`
  •          sed -i &quot;${nline}c $ReplacedCharacter$1&quot; $file_name   
  •      }
  •    changeFile
  • }
  • xiugai_tmp
  • sleep 1
  • #-------------------
  • # 打包反编译后的目录
  • #-------------------
  • echo &quot;正在打包反编译目录为APK请稍后......&quot;
  • java -jar ${apktool_dir}/apktool.jar b &quot;${apktool_dir}/tmp&quot; -o ${apktool_dir}/NEW_${apk_name}
  • echo -e &quot;APK打包完成!\n${apktool_dir}/NEW_${apk_name}&quot;
  • sleep 1
  • #-------------------
  • # 签名 NEW_xxx.apk
  • #-------------------
  • #输出自动签名脚本
  • expect_1='#!/usr/bin/expect'
  • expect_3=&quot;set apktool_dir &quot;${apktool_dir}/KeyFileName.keystore&quot;&quot;
  • expect_4=&quot;set passwd &quot;123456&quot;&quot;
  • expect_5=&quot;#set timeout 20&quot;
  • expect_6=&quot;spawn jarsigner -verbose -keystore $apktool_dir/KeyFileName.keystore ${apktool_dir}/NEW_${apk_name} KeyName&quot;
  • expect_7=&quot;expect &quot;输入密钥库的密码短语:&quot;&quot;
  • expect_8=&quot;send &quot;\$passwd\\r&quot;&quot;
  • expect_9=&quot;interact&quot;
  • echo &quot;${expect_1}&quot; >> ${apktool_dir}/expect_B.sh
  • echo &quot;${expect_3}&quot; >> ${apktool_dir}/expect_B.sh
  • echo &quot;${expect_4}&quot; >> ${apktool_dir}/expect_B.sh
  • echo &quot;${expect_5}&quot; >> ${apktool_dir}/expect_B.sh
  • echo &quot;${expect_6}&quot; >> ${apktool_dir}/expect_B.sh
  • echo &quot;${expect_7}&quot; >> ${apktool_dir}/expect_B.sh
  • echo &quot;${expect_8}&quot; >> ${apktool_dir}/expect_B.sh
  • echo &quot;${expect_9}&quot; >> ${apktool_dir}/expect_B.sh
  • sleep 1
  • chmod -R 755 ${apktool_dir}/expect_B.sh
  • echo &quot;正在签名APK......&quot;
  • cd ${apktool_dir} && ./expect_B.sh
  • echo &quot;签名结束&quot;
  • #-------------------
  • echo -e &quot;编译签名后的APK\n${apktool_dir}/NEW_${apk_name}&quot;

  • sleep 5exit 0






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|白黑论坛 |网站地图

GMT+8, 2025-5-7 17:24 , Processed in 0.016969 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表