!
也想出现在这里? 联系我们
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中
当前位置:首页>搭建攻略> 在 Linux 系统中使用 apktool.jar 编译安卓客户端

在 Linux 系统中使用 apktool.jar 编译安卓客户端

前言:

弄这个脚本就是想做一键端脚本,这个脚本可以在线使用,也可以本地使用,配合Docker镜像服务端是比较完美。如果技术好的可以配合油猴脚本使用来获得下载地址

工具下载:

教程:

  • MYapkTool2.2.2.zip解压出来放到合适的位置做下载链接
  • 如果apktool.jar Replacement.sh APK KeyFileName.keystore都是在线下载
  • MYapkTool2.2.2.zip解压出来 修改MYapkTool.sh
  • 找到apk_name="xxx.apk"  xxx.apk换成你apk的名字,比如:123.apk

使用案例:

#CentOS Linux
yum install -y wget && wget http://xxx.xxx.xxx.xxx/MYapkTool.sh && bash MYapkTool.sh
#其他Linux
sudo apt install wget
wget http://xxx.xxx.xxx.xxx/MYapkTool.sh && bash MYapkTool.sh

本地使用:

mkdir -p $HOME/apktool

解压MYapkTool2.2.2.zipapktool.jar Replacement.sh  APK KeyFileName.keystore 放到$HOME/apktool
修改MYapkTool.sh找到xiazai注释掉#xiazai
脚本代码MYapkTool.sh

#!/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/bin:$PATH
      export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_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/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_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="http://schemas.android.com/apk/res/android"  android:installLocation="auto" package="com.sszg.bsxg" platformBuildVersionCode="23" platformBuildVersionName="6.0-2438415">'
#需要替换字符的目标文件
file_name="${apktool_dir}/tmp/AndroidManifest.xml"
#需要查找的字符
key_value="package=\"com.sszg.bsxg\""

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

sleep 5
exit 0
重要声明

本网站的文章部分内容可能来源于网络,如有侵犯你的权益请联系邮箱:west2@qq.com 站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请在下载24小时内删除!本站资源大多存储在云盘,如发现链接失效请反馈,我们会及时更新。


       

如果遇到积分购买才可查阅的文章,建议升级会员或者成为认证用户。全站95%资源免费下载”。

给TA打赏
共{{data.count}}人
人已打赏
搭建攻略

【新手必看】搭建手游遇到的各项问题-解决宝典!

2022-10-29 17:29:55

搭建攻略

《枫之战纪》单人副本和去商场某些道具限购方法

2022-11-25 20:42:31

3 条回复 A文章作者 M管理员
  1. 冰清玉洁潘金莲

    点点赞赏,手留余香 给TA打赏 共0人 还没有人赞赏,快来当第一个赞赏的人吧!

  2. 7913

  3. suyx

    有两件事我最憎恶:没有信仰的博才多学和充满信仰的愚昧无知

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
联系我们