代码拉取完成,页面将自动刷新
同步操作将从 Yeliqin666/TIK 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#!/bin/bash
# Add by affggh for windows
HOST="$(uname)"
platform=$(uname -m)
if [[ $(uname -m) != "aarch64" ]]; then su="sudo ";fi;
if [ $(uname -o) == "Cygwin" ]; then
WINPLATFORM=true
HOST="Win"
platform="x86_64"
unset su
cd $(pwd)
fi
LOCALDIR="$(cd $(dirname $0); pwd)"
binner=$LOCALDIR/bin && source $binner/settings
yecho(){ echo -e "\033[36m[`date '+%H:%M:%S'`]${1}\033[0m" ; } #显示打印
ywarn(){ echo -e "\033[31m${1}\033[0m" ; } #显示打印
ysuc(){ echo -e "\033[32m[`date '+%H:%M:%S'`]${1}\033[0m" ; } #显示打印
getprop() { grep "$1" "${SYSTEM_DIR}/build.prop" | cut -d "=" -f 2; } #读取机型配置
getconfig() { grep "$1" "${PROJECT_DIR}/TI_config/project_config" | cut -d "=" -f 2; } #读取项目信息
tikver=$(cat $binner/version)
# Edit by affggh
MBK="$binner/MBK"
export ebinner=$binner/$HOST/$platform
if [ "$platform" = "aarch64" ];then
command+=" -b /sdcard"
Sourcedir=/sdcard/$mydir
else
Sourcedir=$LOCALDIR
fi
# 主菜单
function menu()
{
clear
PROJECT_DIR=$LOCALDIR/$project && cd $PROJECT_DIR
if [[ ! -d "TI_config" ]]; then
ywarn "项目已损坏!" && menu
fi
echo -e " \033[31m>ROM菜单 \033[0m\n"
echo -e " 项目:$project"
if [[ -f $PROJECT_DIR/system/system/build.prop ]]; then
SYSTEM_DIR="$PROJECT_DIR/system/system"
elif [[ -f $PROJECT_DIR/system/build.prop ]]; then
SYSTEM_DIR="$PROJECT_DIR/system"
else
SYSTEM_DIR=0
ywarn " 非完整ROM项目"
fi
if [[ -f $SYSTEM_DIR/build.prop ]]; then
vend=$(getprop "ro.product.manufacturer")
version=$(getprop "ro.build.version.release=")
Model=$(getprop "ro.product.mod_device")
if ! grep -q "ro.product.mod_device" $SYSTEM_DIR/build.prop;then
Model=$(getprop "ro.product.model")
fi
echo -en "\033[36m 机型:${vend} ${Model} 系统版本:Android ${version}\033[0m"
if grep -q "ro.miui." $SYSTEM_DIR/build.prop;then
miuiver=$(getprop "ro.miui.ui.version.code")
devver=$(getprop ro.system.build.version.incremental)
echo -e "\033[36m | MIUI $miuiver $devver\033[0m"
fi
fi
echo
echo -e "\033[31m 1> 项目列表 2> 解包菜单\033[0m\n"
echo -e "\033[32m 3> 打包菜单 4> 插件菜单\033[0m\n"
echo -e "\033[33m 5> 移动文件\033[0m\n"
echo
read -p " 请输入编号: " op_menu
case $op_menu in
1)
promenu
;;
2)
unpmenu
;;
3)
packmenu
;;
4)
subbed
;;
5)
if [ "$platform" = "aarch64" ];then
movedir
else
ywarn " 不适用!!"
sleep $sleeptime
menu
fi
;;
*)
ywarn " 请输入正确编号!"
sleep $sleeptime
menu
esac
}
# 配置环境
function checkpath()
{
clear
cd $LOCALDIR
if [[ ! -f "$binner/depment" ]]; then
PIP_MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple/
echo -e "\033[34m $(cat $binner/banner) \033[0m"
if [[ $(which id) ]]; then
if [[ $(id -u) = "0" ]]; then
userid="root"
fi
elif [[ $EUID = "0" ]]; then
userid="root"
fi
if [[ $userid = "root" ]]; then
clear
ywarn "检测到系统sudo,将强制目录赋满权!"
sleep $sleeptime
fi
if [ "$platform" = "aarch64" ] && [[ ! -d "/sdcard/TIK" ]]; then
mkdir /sdcard/TIK
fi
# Add by affggh
if [ ! $WINPLATFORM ]; then
yecho "开始配置环境..."
sleep $sleeptime
yecho "更换清华源..."
${su} cp /etc/apt/sources.list /etc/apt/sources.list.bak
${su} sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
${su} sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
yecho "正在更新软件列表..."
${su} apt-get update -y && ${su} apt-get upgrade -y
yecho "正在安装必备软件包..."
packages="python3 python3-pip curl default-jre bc android-sdk-libsparse-utils aria2 openjdk-11-jre zip p7zip-full"
for i in $packages
do
yecho "安装$i..."
${su} apt-get install $i -y
done
${su} apt --fix-broken install
${su} apt update --fix-missing
fi
pip3 install --upgrade pip -i $PIP_MIRROR
pip3 install pycryptodome -i $PIP_MIRROR
pip3 install docopt -i $PIP_MIRROR
pip3 install requests -i $PIP_MIRROR
pip3 install beautifulsoup4 -i $PIP_MIRROR
pip3 install --ignore-installed pyyaml -i $PIP_MIRROR
touch $binner/depment
fi
content=$(curl -s https://v1.jinrishici.com/all.json)
shiju=$(echo $content| cut -d \" -f 4 )
from=$(echo $content| cut -d \" -f 8)
author=$(echo $content| cut -d \" -f 12)
promenu
if [[ $userid = "root" ]]; then
${su} chmod 777 -R *
fi
}
# 项目菜单
function promenu()
{
clear
cd $LOCALDIR
echo -e "\033[31m $(cat $binner/banner) \033[0m"
echo
updatev=$(curl -s https://gitee.com/yeliqin666/TIK/raw/master/bin/version)
if [ $updatev -gt $tikver ];then
ywarn "检测到更新:【$updatev】"
else
echo -ne "\033[36m “$shiju”"
echo -e "\033[36m---$author《$from》\033[0m"
echo -e " \n"
fi
echo -e " >\033[33m 项目列表 \033[0m\n"
echo -e "\033[31m [00] 删除项目\033[0m\n"
echo -e " [0] 新建项目\n"
pro=0
if ls TI_* >/dev/null 2>&1;then
for pros in $(ls -d TI_*/| sed 's/\///g')
do
if [ -d "./$pros" ];then
pro=$((pro+1))
echo -e " [$pro] $pros\n"
eval "pro$pro=$pros"
fi
done
fi
echo -e " --------------------------------------"
echo -e "\033[33m [55] 解压 [66] 下载 [77] 退出 [88] 设置 \033[0m"
echo -e ""
echo -e " \n"
read -p " 请输入序号:" op_pro
if [ "$op_pro" == "55" ]; then
unfilep
elif [ "$op_pro" == "66" ]; then
xiazai
elif [ "$op_pro" == "00" ]; then
read -p " 请输入你要删除的项目序号:" deln
if ls TI_* >/dev/null 2>&1;then
if [ $deln -gt $pro ];then
ywarn " 请输入正确编号!"
sleep $sleeptime
promenu
else
eval "delproject=\$pro$deln"
read -p " 确认删除?[1/0]" delr
if [ "$delr" == "1" ];then
rm -fr $delproject
ysuc " 删除成功!"
sleep $sleeptime
fi
promenu
fi
else
ywarn " 输入有误!"
sleep $sleeptime
promenu
fi
elif [ "$op_pro" == "0" ]; then
newpro
elif [ "$op_pro" == "77" ]; then
clear
exit
elif [ "$op_pro" == "88" ]; then
settings
elif [[ $op_pro =~ ^-?[1-9][0-9]*$ ]]; then
if ls TI_* >/dev/null 2>&1;then
if [ $op_pro -gt $pro ];then
ywarn " 请输入正确编号!"
sleep $sleeptime
promenu
else
eval "project=\$pro$op_pro"
cd $project
menu
fi
else
ywarn " 请输入正确编号!"
sleep $sleeptime
promenu
fi
else
ywarn " 请输入正确编号!"
sleep $sleeptime
promenu
fi
}
# 解压制作
function unfilep()
{
clear
cd $Sourcedir
echo -e " \033[31m >ROM列表 \033[0m\n"
zipn=0
ywarn " 请将ROM放于$Sourcedir下!"
if ls -d $Sourcedir/*.zip >/dev/null 2>&1;then
cd $Sourcedir
for zip0 in $(ls *.zip)
do
if [ -f "$zip0" ]; then
zip=$(echo "$zip0" )
zipn=$((zipn+1))
echo -e " [$zipn]- $zip\n"
eval "zip$zipn=$zip"
fi
done
cd $LOCALDIR
else
ywarn " 没有ROM文件!"
fi
echo -e "-------------------------------------------------------\n"
echo -e ""
read -p "请输入对应序列号:" zipd
if [[ $zipd =~ ^-?[1-9][0-9]*$ ]]; then
if [ $zipd -gt $zipn ];then
ywarn "输入有误!"
sleep $sleeptime && promenu
else
eval "zip=\$zip$zipd"
zs=$(echo "$zip" | rev | cut -d'.' -f1 --complement | rev)
read -p "请输入项目名称(可留空):" projec
if test -z "$projec";then
project=TI_$zs
else
project=TI_$projec
fi
if [[ -d "$project" ]]; then
project="$project"-`date "+%Y%m%d%H%M%S"`
ywarn "项目已存在!自动命名为:$project"
fi
PROJECT_DIR=$LOCALDIR/$project && mkdir $PROJECT_DIR
echo 创建项目:$project 成功!
yecho "解压刷机包中..."
7z x "$Sourcedir/$zip" -o"$LOCALDIR/$project/" > /dev/null
sleep $sleeptime
autounpack
sleep $sleeptime
fi
else
ywarn "输入有误!!" && promenu
sleep $sleeptime
fi
}
# 新建项目
function newpro()
{
clear
cd $LOCALDIR
echo " "
read -p "请输入项目名称(非中文):TI_" projec
if test -z "$projec";then
ywarn "请键入!"
sleep $sleeptime
promenu
else
project=TI_$projec
if [[ -d "$project" ]]; then
project="$project"-`date "+%Y%m%d%H%M%S"`
ywarn "项目已存在!自动命名为:$project"
sleep $sleeptime
fi
mkdir $project
mkdir $project/TI_config
menu
fi
}
function zhilian()
{
read -p "请输入需要下载ROM的直链:" downrom
if test -z "$downrom"; then
ywarn "请输入!"
sleep $sleeptime
xiazai
else
zip=$(basename $downrom)
yecho "开始下载:$zip"
sleep $sleeptime
aria2c -s 9 -x 2 $downrom -d $Sourcedir
ysuc "下载完成!"
sleep $sleeptime
promenu
fi
}
function subbed()
{
cd $LOCALDIR
clear
if [[ ! -d $binner/subs ]]; then
mkdir $binner/subs
fi
clear
echo
echo -e " >\033[31m插件列表 \033[0m\n"
subn=0
cd $binner/subs
for sub in $(ls)
do
if [ -d "./$sub" ];then
subn=$((subn+1))
echo -e " [$subn]- $sub\n"
eval "sub$subn=$sub"
fi
done
echo -e "----------------------------------------------\n"
echo -e "\033[33m> [44]- 安装 [55]- 删除 [66]- 项目菜单\033[0m"
echo -e ""
read -p "请输入序号:" op_pro
if [ "$op_pro" == "44" ]; then
subber
elif [ "$op_pro" == "55" ]; then
read -p "请输入你要删除的插件序号:" op_pro
for key in ${!mysubs[@]}
do
if [ "$key" == "$op_pro" ]; then
sub=${mysubs[$key]}
break
fi
done
op_pro=""
eval "sub=\$sub"
#再次确认
read -p "在回车之前,您可以ctrl+c中断删除" null
rm -fr $sub
ysuc "删除成功!"
sleep $sleeptime
subbed
elif [ "$op_pro" == "66" ]; then
menu
elif [[ $op_pro =~ ^-?[1-9][0-9]*$ ]]; then
if ls >/dev/null 2>&1;then
if [ $op_pro -gt $subn ];then
ywarn "请输入正确编号!"
sleep $sleeptime
menu
else
for key in ${!mysubs[@]}
do
if [ "$key" == "$op_pro" ]; then
sub=${mysubs[$key]}
break
fi
done
op_pro=""
#检验插件完整性
eval "sub=\$sub"
cd $PROJECT_DIR && $binner/subs/$sub/run.sh $PROJECT_DIR $SYSTEM_DIR
sleep $sleeptime
subbed
fi
else
ywarn "请输入正确编号!"
sleep $sleeptime
subbed
fi
else
ywarn "请输入正确编号!"
sleep $sleeptime
subbed
fi
}
function subber()
{
clear
cd $LOCALDIR
echo -e " \033[31m >插件列表 \033[0m\n"
zipn=0
ywarn " 请将插件放于$Sourcedir下!"
if ls -d $Sourcedir/*.zip >/dev/null 2>&1;then
cd $Sourcedir
for zip0 in $(ls *.zip)
do
if [ -f "$zip0" ]; then
zip=$(echo "$zip0" )
zipn=$((zipn+1))
echo -e " [$zipn]- $zip\n"
eval "zip$zipn=$zip"
fi
done
cd $LOCALDIR
else
ywarn " 没有插件文件!"
fi
echo -e "-------------------------------------------------------\n"
echo -e ""
read -p "请输入对应序列号:" zipd
if [[ $zipd =~ ^-?[1-9][0-9]*$ ]]; then
if [ $zipd -gt $zipn ];then
ywarn "输入有误!"
sleep $sleeptime
else
eval "zip=\$zip$zipd"
zs=$(echo "$zip" | rev | cut -d'.' -f1 --complement | rev)
if [[ -d $binner/subs/$zs ]]; then
${su} rm -fr $binner/subs/$zs
fi
mkdir $binner/subs/$zs
yecho "安装插件[$zs]中..."
7z x "$Sourcedir/$zip" -o"$binner/subs/$zs" > /dev/null
${su} chmod -R 777 $binner/subs/$zs
ysuc "安装完成"
sleep $sleeptime
fi
else
ywarn "输入有误!!"
sleep $sleeptime
fi
subbed
}
function movedir()
{
clear
echo -e "\033[31m<-移动项目文件 \033[0m"
echo "移动本目录下部分文件至/sdcard/$mydir/$project"
fil=0
echo -e " [0]- 返回菜单\n"
if ls >/dev/null 2>&1;then
for fis in $(ls)
do
if [ -d "./$fis" ];then
fil=$((fi+1))
if [ "$fis" == "TI_out" ];then
echo " [$fil]- $fis"
elif [ -d "$fis" ];then
echo -e "\033[31m [$fil]- $fis\n\033[0m"
fi
eval "fi$fil=$fis"
fi
done
fi
echo -e "-------------------------------------------\n"
read -p "请输入序号:" op
if [[ $op =~ ^-?[1-9][0-9]*$ ]]; then
if [ $op -gt $fil ];then
ywarn "请输入正确编号!"
sleep $sleeptime
menu
else
eval "mof=\$fil$op"
if [[ ! -d "/sdcard/$mydir/$project" ]]; then
mkdir /sdcard/$mydir/$project
fi
yecho "移动$mof中..."
mv $PROJECT_DIR/$mof /sdcard/$mydir/$project
read -p "请自由修改/sdcard/$mydir/$project,完成后,回车移回项目文件!" null
mv /sdcard/$mydir/$project/* $PROJECT_DIR
menu
fi
else
ywarn "请输入正确编号!"
sleep $sleeptime
menu
fi
}
function miuiupdate()
{
echo
echo "[1]国内版 [2]印尼版 [3]俄版 [4]国际版 [5]欧版 [6]土耳其版 [7]台湾版 [8]日本版 [9]新加坡版"
read -p "请选择地区代号:" op_menu
case $op_menu in
1)
region=cn
;;
2)
region=id
;;
3)
region=ru
;;
4)
region=global
;;
5)
region=eea
;;
6)
region=tr
;;
7)
region=tw
;;
8)
region=gp
;;
9)
region=sg
;;
*)
region=cn
ywarn "默认选择国内版!"
sleep $sleeptime
esac
echo
read -p "请输入机型代号:" model
echo
echo "[1]卡刷包 [2]线刷包:"
read -p "请选择ROM类型:" ver
case "$ver" in
2)
version=fastboot
;;
*)
version=recovery
esac
echo
echo "[1]开发版内测 [2]开发版公测 [3]稳定版"
read -p "请选择类型:" typr
case $typr in
1)
type=Beta
;;
2)
type=PublicBeta
;;
3)
type=Stable
;;
*)
type=Beta
ywarn "默认选择开发版内测!"
sleep $sleeptime
esac
link=0 && link=$(python3 $binner/get_miui.py $region $model $version $type)
if echo $link | grep "http" > /dev/null 2>&1 ; then
echo $link
read -p "是否开始下载?[1/0]:" ver
case "$ver" in
1)
zip=$(basename $link)
yecho "开始下载${zip}..."
sleep $sleeptime
aria2c -s 9 -x 2 $link -d $Sourcedir
ysuc "下载完成!"
;;
*)
echo
esac
fi
promenu
}
# 下载器
function xiazai()
{
clear
cd $LOCALDIR
echo
echo -e "\033[33m> [1]- 返回主页 [2]- 输入直链 [3]- 获取MIUI_ROM \033[0m"
read -p "请输入编号: " op_menu
case $op_menu in
1)
promenu
;;
2)
zhilian
;;
3)
miuiupdate
;;
*)
ywarn "请输入正确编号!"
sleep $sleeptime
promenu
esac
}
# 打包
function packmenu()
{
clear
cd $LOCALDIR && cd $project
clear
echo
echo -e "\033[33m <-打包菜单 \033[0m"
echo " --------------------------------"
echo " 1 > 返回 hom 2 > 打包 Bro "
echo " 3 > 打包 Dat 4 > 打包 Img "
echo " 5 > 打包 Super 6 > 打包 DTBO"
echo " 7 > 打包 DTB "
echo " --------------------------------"
read -p " 请输入编号: " op_menu
case $op_menu in
1)
menu
;;
2)
br=1&&dat=1&&packer
;;
3)
br=0&&dat=1&&packer
;;
4)
br=0&&dat=0&&packer
packmenu
;;
5)
packsuper
packmenu
;;
6)
makedtbo
;;
7)
makedtb
;;
*)
ywarn " 请输入正确编号!"
sleep $sleeptime
packmenu
esac
}
# 分解菜单
function unpmenu()
{
clear
cd $LOCALDIR && cd $project
echo -e "\033[33m <-分解菜单 \033[0m"
echo " --------------------------------"
echo " 1 > 返回 hom 2 > 分解 Bro "
echo " 3 > 分解 Dat 4 > 分解 Img "
echo " 5 > 分解 Bin 6 > 分解 Win "
echo " 7 > 分解 DTBO 8 > 分解 DTB"
echo " 9 > 分解 OFP 10> 合并分段dat并分解"
echo " 11> 分解 Ops 12> 合并分段win并分解"
echo " 13> 分解 Ozip 14> 合并分段super并分解"
echo " -------------------------------- "
read -p " 请输入编号: " op_menu
case $op_menu in
1)
menu
;;
2)
type1=br&&unpacker
;;
3)
type1=dat&&unpacker
;;
4)
type1=img&&unpacker
;;
5)
type1=bin&&unpacker
;;
6)
type1=win&&unpacker
;;
7)
undtbo
;;
8)
undtb
;;
9)
type1=ofp&&unpacker
;;
10)
type1=dat.1&&unpacker
;;
11)
type1=ops&&unpacker
;;
12)
type1=win000&&unpacker
;;
13)
type1=ozip&&unpacker
;;
14)
unsuper2
;;
*)
ywarn "请输入正确编号!"
sleep $sleeptime
unpmenu
esac
}
# 分解
function unpacker()
{
clear
cd $LOCALDIR && cd $project
unpall=0&&checkunp=0
echo -e "\033[33m<-分解$type1 \033[0m"
if ls *.${type1} >/dev/null 2>&1;then
read -p "是否解压所有$type1 [1/0] " unpall
ls *.${type1} | while read i; do
sf=$(echo "$i" | rev |cut -d'.' -f1 --complement | rev | sed 's/.new.dat//g' | sed 's/.new//g')
info=$($ebinner/gettype -i $i)
if [ "$unpall" = "1" ];then
yecho "解包 $i"
inunpack
else
read -p "是否解包$i?[1/0] " checkunp </dev/tty
if [ "$checkunp" != "0" ];then
yecho "解包 $i"
rm -fr ./$sf
inunpack
fi
fi
done
else
ywarn "没有${type1}文件!"
sleep $sleeptime
fi
unpmenu
}
# 打包
function packer()
{
clear
cd $LOCALDIR && cd $project
if [ "$br" = "1" ];then
echo -e "\033[33m<-打包Brotli \033[0m"
elif [ "$dat" = "1" ];then
echo -e "\033[33m<-打包Dat \033[0m"
else
echo -e "\033[33m<-打包Img \033[0m"
fi
if [[ ! -d "TI_out" ]]; then
mkdir $PROJECT_DIR/TI_out
fi
if ls ./TI_config/*.info >/dev/null 2>&1;then
read -p "是否打包所有启动镜像? [1/0] " pacall
ls TI_config/*.info | while read i; do
sf=$(echo "$i" | cut -d"/" -f2 | cut -d'.' -f1 )
rm -rf $AIK/split_img && rm -rf $AIK/ramdisk && rm -rf $AIK/*.img
if [ -e $AIK/ramdisk-new.cpio.gz ]; then
rm -rf $AIK/ramdisk-new.cpio.gz
fi
if [ "$pacall" = "1" ];then
bootpac $sf >/dev/null
else
read -p "是否打包$sf.img?[1/0] " imgcheck </dev/tty
if [ "$imgcheck" != "0" ];then
bootpac $sf >/dev/null
fi
fi
done
fi
if ls ./TI_config/*_fs_config >/dev/null 2>&1;then
read -p "是否打包所有系统镜像? [1/0] " pacall
read -p "打包文件系统: [1]ext4 [2]erofs+lz4hc [3]erofs+lz4 [4]erofs " syscheck
ls TI_config/*_fs_config | while read i; do
sf=$(echo "$i" | cut -d"/" -f2 | sed 's/_fs_config//g')
if [ "$pacall" = "1" ];then
yecho "打包 $sf"
rm -f ${sf}.img > /dev/null
rm -f ${sf}.s.img > /dev/null
inpacker $sf
else
read -p "是否打包$sf?[1/0] " imgcheck </dev/tty
if [ "$imgcheck" != "0" ];then
yecho "打包 ${sf}..."
rm -f ${sf}.img > /dev/null
inpacker $sf > /dev/null
fi
fi
done
fi
packmenu
}
inpacker(){
#基本参数
name=${1}
mount_path="/$name"
#if [ "$name" == "system" ];then mount_path="/" ;fi
file_contexts="${PROJECT_DIR}/TI_config/${name}_file_contexts"
fs_config="${PROJECT_DIR}/TI_config/${name}_fs_config"
UTC=$(date -u +%s)
BLOCKSIZE=4096
out_img="${PROJECT_DIR}/TI_out/${name}.img"
in_files="${PROJECT_DIR}/${name}"
#分区大小处理
size0=$(cat $PROJECT_DIR/TI_config/${name}_size.txt)
img_size0=`du -sb $name | awk {'print $1'}`
if [ $img_size0 -gt 10000000 ] ; then
img_size0=`echo "$img_size0 * 1.0758" |bc`
else
img_size0=`echo "$img_size0 * 1.2" |bc`
fi
img_size=`echo $img_size0 | sed 's/\..*//g'`
size=`echo "$img_size0 / $BLOCKSIZE" |bc`
echo $img_size >$PROJECT_DIR/TI_config/${name}_size.txt
if [[ -f "dynamic_partitions_op_list" ]]; then
sed -i "s/resize ${name}\s.*/resize ${name} $img_size/" $PROJECT_DIR/dynamic_partitions_op_list
fi
${su} python3 $binner/fs.py $in_files ${fs_config}_ ${PROJECT_DIR} $name
if [ "$syscheck" = "2" ];then
${su} $ebinner/mkfs.erofs -zlz4hc --mount-point $mount_path --fs-config-file $fs_config --file-contexts $file_contexts $out_img $in_files > /dev/null
elif [ "$syscheck" = "3" ];then
${su} $ebinner/mkfs.erofs -zlz4 --mount-point $mount_path --fs-config-file $fs_config --file-contexts $file_contexts $out_img $in_files > /dev/null
elif [ "$syscheck" = "4" ];then
${su} $ebinner/mkfs.erofs --mount-point $mount_path --fs-config-file $fs_config --file-contexts $file_contexts $out_img $in_files > /dev/null
else
$ebinner/mke2fs -O ^has_journal -L $name -I 256 -M $mount_path -m 0 -t ext4 -b $BLOCKSIZE $out_img $size > /dev/null
${su} $ebinner/e2fsdroid -e -T $UTC -C $fs_config -S $file_contexts -f $in_files -a $mount_path $out_img > /dev/null
fi
if [ "$dat" = "1" ];then
$ebinner/img2simg ./TI_out/${name}.img $PROJECT_DIR/TI_out/${name}.s.img > /dev/null
rm -rf $PROJECT_DIR/TI_out/${name}.img > /dev/null
python3 $binner/img2sdat/img2sdat.py $PROJECT_DIR/TI_out/${name}.s.img -o $PROJECT_DIR/TI_out/ -v 4 -p ${name} > /dev/null
rm -rf $PROJECT_DIR/TI_out/${name}.s.img > /dev/null
fi
if [ "$br" = "1" ];then
$ebinner/brotli -q $brcom $PROJECT_DIR/TI_out/${name}.new.dat -o $PROJECT_DIR/TI_out/${name}.new.dat.br > /dev/null
rm -rf $PROJECT_DIR/TI_out/${name}.new.dat > /dev/null
fi
}
function undtbo()
{
cd $LOCALDIR && cd $project
echo -e "\033[33m <-分解DTBO \033[0m"
rm -rf $dtbodir
if [ -f "./dtbo.img" ];then
filedtbo="dtbo.img"
elif [ -f "./firmware-update/dtbo.img" ];then
filedtbo="firmware-update/dtbo.img"
else
ywarn "dtbo.img不存在!"
sleep $sleeptime
unpmenu
fi
dtc="$ebinner/dtc"
mkdtimg_tool="$binner/dtb_tools/mkdtboimg.py"
dtbodir="./dtbo"
mkdir -p $dtbodir/dtbo_files
mkdir -p $dtbodir/dts_files
yecho "正在解压dtbo.img"
python3 $mkdtimg_tool dump "./$filedtbo" -b "$dtbodir/dtbo_files/dtbo" > $dtbodir/dtbo_imageinfo.txt
dtbo_files_name=$(ls $dtbodir/dtbo_files)
for dtbo_files in $dtbo_files_name ;do
dts_files=$(echo "$dtbo_files" | sed 's/dtbo/dts/g')
yecho "正在反编译$dtbo_files为$dts_files"
$dtc -@ -I "dtb" -O "dts" "$dtbodir/dtbo_files/$dtbo_files" -o "$dtbodir/dts_files/$dts_files" > /dev/null 2>&1
[ $? != 0 ] && ywarn "反编译$dtbo_files失败" && unpmenu
done
ysuc "解压完成!"
if [[ $userid = "root" ]]; then
chmod 777 -R $dtbodir
fi
unpmenu
}
function makedtbo()
{
cd $LOCALDIR && cd $project
echo -e "\033[33m <-打包DTBO \033[0m"
rm -rf $dtbodir
dtc="$ebinner/dtc"
mkdtimg_tool="$binner/dtb_tools/mkdtboimg.py"
dtbodir="$PROJECT_DIR/dtbo"
rm -rf $dtbodir/new_dtbo_files
mkdir -p $dtbodir/new_dtbo_files
dts_files_name=$(ls $dtbodir/dts_files)
for dts_files in $dts_files_name ;do
new_dtbo_files=$(echo "$dts_files" | sed 's/dts/dtbo/g')
yecho "正在回编译$dts_files为$new_dtbo_files"
$dtc -@ -I "dts" -O "dtb" "$dtbodir/dts_files/$dts_files" -o "$dtbodir/new_dtbo_files/$new_dtbo_files" > /dev/null 2>&1
done
file_number=$(ls -l $dtbodir/new_dtbo_files | grep "^-" | wc -l)
echo "当前dtbo文件个数为:$file_number "
yecho "正在生成dtbo.img..."
$mkdtimg_tool $dtbodir/new_dtbo_files/* create "$PROJECT_DIR/TI_out/dtbo.img" --page_size="4096" "$dtbodir/dtbo_files/$dtbo_files"
if [ $? = 0 ];then
ysuc "生成完毕!"
if [[ $userid = "root" ]]; then
chmod 777 -R $dtbodir
fi
else
ywarn "dtbo.img 生成失败!"
fi
sleep $sleeptime
packmenu
}
bootpac()
{
sf=${1}
${su} $MBK/repackimg.sh $PROJECT_DIR/TI_config/${sf}.img boot
rm -f $PROJECT_DIR/TI_out/$sf.img && mv $PROJECT_DIR/$sf/new-boot.img $PROJECT_DIR/TI_out/$sf.img
sleep 3
}
function imgextra()
{
if [ "$info" = "sparse" ]; then
yecho "当前sparseimg转换为rimg中..."
$ebinner/simg2img $PROJECT_DIR/$sf.img $PROJECT_DIR/${sf}r.img && rm -rf ./$sf.img
mv $PROJECT_DIR/${sf}r.img $PROJECT_DIR/${sf}.img
info=$($ebinner/gettype -i $sf.img)
imgextra
elif [ "$info" = "super" ];then
super_size=$(du -sb "./${sf}.img" | awk '{print $1}' | bc -q)
yecho "super分区大小: $super_size bytes 解压${sf}.img中..."
mkdir super
TARGETDIR=./super
$ebinner/lpunpack $PROJECT_DIR/${sf}.img $TARGETDIR
if [ $? != "0" ];then
ywarn "解压失败"
else
ysuc "super输出至 $TARGETDIR"
fi
if [[ $userid = "root" ]]; then
chmod 777 -R $TARGETDIR
fi
elif [ "$info" = "ext" ]; then
${su} python3 $binner/imgextractor${HOST}.py $PROJECT_DIR/$sf.img ./ > /dev/null
if [ $? != "0" ];then
ywarn "解压失败"
fi
elif [ "$info" = "erofs" ]; then
$ebinner/erofsUnpackRust $i ./
mv ./config/* ./TI_config&&rm -fr ./config
if [ $? != "0" ];then
ywarn "解压失败"
fi
elif [ "$info" = "boot" ] || [ "$sf" == "boot" ] || [ "$sf" == "vendor_boot" ] || [ "$sf" == "recovery" ] ; then
if [[ -d "$sf" ]]; then
rm -fr $sf
fi
${su} mkdir $sf && cd $sf
${su} $MBK/unpackimg.sh $PROJECT_DIR/$i >> $PROJECT_DIR/TI_config/$sf.info
${su} cp -f $PROJECT_DIR/$i $PROJECT_DIR/TI_config
if [[ $userid = "root" ]]; then
${su} chmod 777 -R ./$sf
fi
else
ywarn "未知格式!请附带文件提交issue!"
sleep $sleeptime
fi
sleep 10
}
function unsuper2()
{
echo "目录下文件:"&&ls
read -p " 请输入需合并镜像名(空格 可通配符):" suis
read -p " 请输入输出镜像名:" suib
$ebinner/simg2img $suis $suib.img
if [ $? != "0" ];then
ywarn "解压失败"
else
ysuc "合并成功!开始解包..."
super_size=$(du -sb "$suib.img" | awk '{print $1}' | bc -q)
yecho "super分区大小: $super_size bytes 解压中..."
mkdir super
TARGETDIR=./super
$ebinner/lpunpack $PROJECT_DIR/${sf}.img $TARGETDIR
if [ $? != "0" ];then
ywarn "解压失败"
else
ysuc "super输出至 $TARGETDIR"
fi
fi
unpmenu
}
function undtb()
{
cd $LOCALDIR && cd $project
echo -e "\033[33m <-分解DTB \033[0m"
rm -rf $dtbdir
if [ ! -e ./dtb ];then
ywarn " dtb文件不存在!它或许存在于boot或者vendor_boot中,请解包后移至项目根目录"
sleep $sleeptime
unpmenu
fi
dtc="$ebinner/dtc"
dtbdir="$PROJECT_DIR/dtbs"
mkdir $dtbdir
mkdir -p $dtbdir/dts_files
yecho "正在反编译dtb"
$dtc -@ -I "dtb" -O "dts" "./dtb" -o "$dtbdir/dts_files/dts" > /dev/null 2>&1
[ $? != 0 ] && ywarn "反编译dtb失败" && unpmenu
ysuc "反编译完成!"
sleep $sleeptime
if [[ $userid = "root" ]]; then
chmod 777 -R $dtbdir
fi
unpmenu
}
function makedtb()
{
cd $LOCALDIR && cd $project
echo -e "\033[33m<-打包DTB \033[0m"
dtc="$ebinner/dtc"
dtbdir="$PROJECT_DIR/dtbs"
rm -rf $dtbdir/new_dtb_files
mkdir -p $dtbdir/new_dtb_files
dts_files_name=$(ls $dtbdir/dts_files)
for dts_files in $dts_files_name ;do
new_dtb_files=$(echo "$dts_files" | sed 's/dts/dtb/g')
yecho "正在回编译$dts_files为$new_dtb_files"
$dtc -@ -I "dts" -O "dtb" "$dtbdir/dts_files/$dts_files" -o "$dtbdir/new_dtb_files/$new_dtb_files" > /dev/null 2>&1
[ $? != 0 ] && ywarn "回编译dtb失败" && unpmenu
done
find $dtbdir/new_dtb_files -name "dtb*" -exec cat {} > $PROJECT_DIR/TI_out/dtb \;
ysuc "回编译完成!"
sleep $sleeptime
if [[ $userid = "root" ]]; then
chmod 777 -R $dtbdir
fi
packmenu
}
function packsuper()
{
clear
if [[ ! -d "super" ]]; then
mkdir $PROJECT_DIR/super
fi
ywarn "请将需要打包的分区镜像放置于$PROJECT_DIR/super中!"
read -p "请输入打包模式:[1]A_only [2]AB [3]V-AB " typee
if [ "$typee" = "3" ];then
type1=VAB
elif [ "$typee" = "2" ];then
type1=AB
else
type1=A_only
fi
read -p "是否打包为sparse镜像?[1/0] " sparse
read -p "请输入super分区大小(字节数,常见9126805504 10200547328 16106127360) " supersize
read -p "请输入输出镜像名: " supername
if [[ -d "$supername.img" ]]; then
supername="$supername"-`date "+%Y%m%d%H%M%S"`
ywarn "已存在!自动命名为:$supername"
fi
insuper $PROJECT_DIR/super $supername
packmenu
}
function inunpack()
{
if [[ ! -d "TI_config" ]]; then
mkdir $PROJECT_DIR/TI_config
fi
file=${i}
if [ "$type1" = "br" ];then
rm -f $sf.new.dat $sf.img
$ebinner/brotli -d $PROJECT_DIR/$file > /dev/null
python3 $binner/sdat2img.py $sf.transfer.list $sf.new.dat $PROJECT_DIR/$sf.img > /dev/null
info=$($ebinner/gettype -i $sf.img)
imgextra
elif [ "$type1" = "dat" ];then
rm -f $sf.img
python3 $binner/sdat2img.py $sf.transfer.list $sf.new.dat $PROJECT_DIR/$sf.img > /dev/null
info=$($ebinner/gettype -i $sf.img)
imgextra
elif [ "$type1" = "img" ];then
imgextra
elif [ "$type1" = "ofp" ];then
read -p " ROM机型处理器为??[1]高通 [2]MTK " ofpm
if [ "$ofpm" = "2" ];then
python3 $binner/oppo_decrypt/ofp_mtk_decrypt.py $PROJECT_DIR/$file $PROJECT_DIR/$sf
else
python3 $binner/oppo_decrypt/ofp_qc_decrypt.py $PROJECT_DIR/$file $PROJECT_DIR/$sf
fi
elif [ "$type1" = "ozip" ];then
python3 $binner/oppo_decrypt/ozipdecrypt.py $PROJECT_DIR/$file
elif [ "$type1" = "ops" ];then
python3 $binner/oppo_decrypt/ofp_mtk_decrypt.py $PROJECT_DIR/$file $PROJECT_DIR/$sf
elif [ "$type1" = "bin" ];then
yecho "$file所含分区列表:"
$ebinner/payload-dumper-go -l $PROJECT_DIR/$file
read -p "请输入需要解压的分区名(空格隔开)/all " extp </dev/tty
if [ "$extp" = "all" ];then
$ebinner/payload-dumper-go $PROJECT_DIR/$file -o $PROJECT_DIR/payload
else
if [[ ! -d "payload" ]]; then
mkdir $PROJECT_DIR/payload
fi
for d in $extp
do
$ebinner/payload-dumper-go -p $d $PROJECT_DIR/$file -o $PROJECT_DIR/payload${d} > /dev/null 2>&1
mv $PROJECT_DIR/payload${d} $PROJECT_DIR/payload&&rm -fr payload${d}
done
fi
elif [ "$type1" = "win000" ];then
${su} $ebinner/simg2img *${sf}.win* ./${sf}.win
${su} python3 $binner/imgextractor${HOST}.py ./${sf}.win ./
elif [ "$type1" = "win" ];then
${su} python3 $binner/imgextractor${HOST}.py ./${sf}.win ./
elif [ "$type1" = "dat.1" ];then
${su} cat ./${sf}.new.dat.{1..999} >> ./${sf}.new.dat
python3 $binner/sdat2img.py $sf.transfer.list $sf.new.dat ./$sf.img
imgextra
else
ywarn "未知格式!"
fi
if [[ $userid = "root" ]]; then
${su} chmod 777 -R $sf > /dev/null 2>&1
fi
}
# 自动解压
function autounpack()
{
cd $PROJECT_DIR
mkdir TI_config
yecho "自动解包阶段开始,将自动删除源文件!"
# payload.bin解包
if [ -f "./payload.bin" ]; then
yecho "解压 payload.bin..."
$ebinner/payload-dumper-go ./payload.bin -o ./payload
yecho "payload.bin解包完成!"
sleep $sleeptime
rm -rf payload.bin && rm -rf care_map.pb && rm -rf apex_info.pb&& rm -rf payload_properties.txt
for d in $(ls payload/*.img)
do
sf=$(echo "$d" | rev |cut -d'/' -f1 | rev | sed 's/.img//g')
yecho "检测&解包$sf.img..."
info=$($ebinner/gettype -i $d)
if [[ $sf = "vendor_boot" ]];then
mv $d ./ && i=$sf.img
imgextra
ysuc "成功." && rm -f $sf.img
elif [[ $info = "Unknow" ]] || [[ $info = "dtbo" ]] || [[ $info = "vbmeta" ]];then
ywarn "不支持自动解包!"
else
mv $d ./ && i=$sf.img
imgextra
ysuc "成功." && rm -f $sf.img
fi
done
else
# 解压br文件
if ls *.br >/dev/null 2>&1;then
ls *.new.dat.br | while read i; do
sf=$(echo "$i" | rev |cut -d'.' -f1 --complement | rev | sed 's/.new.dat//g')
yecho "解包$sf..."
${su} $ebinner/brotli -d ${i} > /dev/null 2>&1
rm -rf $sf.new.dat.br
${su} python3 $binner/sdat2img.py ${sf}.transfer.list ${sf}.new.dat ./${sf}.img > /dev/null 2>&1
rm -rf ./${sf}.new.dat && rm -rf ./${sf}.patch.dat && rm -rf ./${sf}.transfer.list > /dev/null 2>&1
info=$($ebinner/gettype -i $sf.img)
i=$sf.img
imgextra
rm -rf ./${sf}.img
done
fi
# 合并分段dat
if ls *.dat.1 >/dev/null 2>&1;then
ls *.new.dat.1 | while read i; do
th=$(echo "$i" | cut -d"/" -f3| cut -d"." -f1)
yecho "合并$th.new.dat..."
${su} cat ./${th}.new.dat.{1..999} >> ./${th}.new.dat
rm -rf ./${th}.new.dat.{1..999}
done
fi
# 解压dat
if ls *.dat >/dev/null 2>&1;then
ls *.new.dat | while read i; do
sf=$(echo "$i" | rev |cut -d'.' -f1 --complement | rev | sed 's/.new.dat//g' | sed 's/.new//g')
yecho "解包$sf..."
${su} python3 $binner/sdat2img.py ${sf}.transfer.list ${sf}.new.dat ./${sf}.img > /dev/null 2>&1
rm -rf ./${sf}.new.dat && rm -rf ./${sf}.patch.dat && rm -rf ./${sf}.transfer.list > /dev/null 2>&1
info=$($ebinner/gettype -i $sf.img)
i=$sf.img
imgextra
done
fi
# 解压img
if ls *.img >/dev/null 2>&1;then
ls *.img | while read i; do
info=$($ebinner/gettype -i $i)
sf=$(echo "$i" | rev |cut -d'.' -f1 --complement | rev )
yecho "解包$i..."
imgextra
done
fi
# TWRP备份文件
if ls *.win000 >/dev/null 2>&1;then
ls *.win000 | while read i; do
bh=$(echo "$i" | cut -d"/" -f3| cut -d"." -f1)
yecho "合并 $bh备份文件..."
${su} $ebinner/simg2img *${bh}.win* ./${bh}.win
rm -rf ./${bh}.win00{0..9}
sleep $sleeptime
done
fi
if ls *.win >/dev/null 2>&1;then
ls *.win | while read i; do
bh=$(echo "$i" | cut -d"/" -f3| cut -d"." -f1)
yecho "解压 $bh备份文件..."
${su} python3 $binner/imgextractor${HOST}.py ./${bh}.win ./
rm -rf ./${bh}.win
sleep $sleeptime
done
fi
fi
if [[ $userid = "root" ]]; then
${su} chmod 777 -R *
fi
menu
}
# 打包Super
function insuper()
{
Imgdir=$1
Supername=$2
group_size=0
if [[ $userid = "root" ]]; then
${su} chmod -R 777 $Imgdir
fi
find $Imgdir -name "*" -type f -size 0c | xargs -n 1 rm -f
superpa="--metadata-size 65536 --super-name super "
if [ "$sparse" = "1" ];then
superpa+="--sparse "
fi
if [ "$type1" = "VAB" ];then
superpa+=" --virtual-ab "
fi
superpa+=" --metadata-slots 2 "
superpa+="--device super:$supersize "
for imag in $(ls $Imgdir/*.img);do
image=$(echo "$imag" | rev | cut -d"/" -f1 | rev | sed 's/_a.img//g' | sed 's/_b.img//g'| sed 's/.img//g')
if ! echo $superpa | grep "partition "$image":readonly" > /dev/null && ! echo $superpa | grep "partition "$image"_a:readonly" > /dev/null ;then
if [ "$type1" = "VAB" ] || [ "$type1" = "AB" ];then
if [[ -f $Imgdir/${image}_a.img ]] && [[ -f $Imgdir/${image}_b.img ]];then
img_sizea=$(wc -c <$Imgdir/${image}_a.img) && img_sizeb=$(wc -c <$Imgdir/${image}_b.img)
group_size=`expr ${img_sizea} + ${img_sizeb} + ${group_size}`
superpa+="--partition "$image"_a:readonly:$img_sizea:main --image "$image"_a=$Imgdir/${image}_a.img --partition "$image"_b:readonly:$img_sizeb:main --image "$image"_b=$Imgdir/${image}_b.img "
else
mv $imag $Imgdir/$image.img > /dev/null 2>&1
img_size=$(wc -c <$Imgdir/$image.img)
group_size=`expr ${img_size} + ${group_size}`
superpa+="--partition "$image"_a:readonly:$img_size:main --image "$image"_a=$Imgdir/$image.img --partition "$image"_b:readonly:0:main "
fi
else
img_size=$(wc -c <$Imgdir/$image.img)
superpa+="--partition "$image":readonly:$img_size:main --image "$image"=$Imgdir/$image.img "
group_size=`expr ${img_size} + ${group_size}`
fi
fi
done
superpa+=" --group main:$group_size "
superpa+="-F --output $PROJECT_DIR/TI_out/$Supername.img"
if ( $ebinner/lpmake $superpa 2>&1 );then
ysuc "成功创建$Supername.img!"
else
ywarn "创建super.img失败!"
fi
sleep $sleeptime
}
fastpack() {
mv -f $PROJECT_DIR/firmware-update $PROJECT_DIR/output >/dev/null 2>&1
filename="$PROJECT_DIR/output/线刷说明.txt"
cat>"${filename}"<<EOF
"首次使用请务必安装驱动文件!!!
驱动位置:/firmware-update/bin/线刷驱动环境
1."FASTBOOTD驱动.exe"(双击文件)
2."一键安装安卓驱动.exe"(双击文件)
3."USB3.0修复补丁.bat"(右键管理员权限)
注:
第2个无法打开,安装 "打不开安装这个(net4.0框架).exe"
建议使用 小米官方 线刷工具 安装一次官方的驱动!!!
二合一刷机包,不解压为卡刷包,解压为线刷包。
线刷请严格遵守刷机规范
首次开机较慢,请耐心等待
刷机有风险,请三思而后行,坏了不赔!
EOF
cat>"$PROJECT_DIR/output/dynamic_partitions_op_list"<<EOF
# Remove all existing dynamic partitions and groups before applying full OTA
remove_all_groups
# Add group qti_dynamic_partitions with maximum size $supersize
add_group qti_dynamic_partitions $supersize
$add_partition_command
$size_partition_command
EOF
#二合一打包
yecho 开始"生成二合一刷机包"
echo
cd $PROJECT_DIR
cp -rf binner/flash/* $PROJECT_DIR/output
sudo chmod -R 777 $PROJECT_DIR/output
if [[ $WINPLATFORM ]]; then
$ebinner/7z a 1.zip * >nul 2>nul
else
zip -r 1.zip * >/dev/null 2>&1
fi
yecho "计算文件md5"
if [[ $needwindep = "1" ]]; then
certutil.exe -hashfile 1.zip MD5>>md5.txt
md5=$(awk 'NR==2{print}' md5.txt | cut -c1-6| tr -d '\r' |tr -d '\n')
rm -rf md5.txt
else
md5=$((md5sum 1.zip) | cut -c1-6| tr -d '\r' |tr -d '\n')
fi
if [[ $comm123 = "1" ]]; then
mv "$tempp/all/1.zip" "$outputzip1"/"$device"_"$version"_"$md5"_"$type"_"$android"_"2in1.zip" >/dev/null 2>&1
rm -rf $tempp
else
mv "$tempp/1.zip" "$outputzip1"/"$device"_"$version"_"$md5"_"$type"_"$android"_"fastboot.zip" >/dev/null 2>&1
fi
clear
}
recflash() {
logtxt "生成卡刷脚本"
cd $base
echo "# ---- radio update tasks ----">updater-script1
echo >>updater-script1
echo "ui_print("\"Patching firmware images..."\");">>updater-script1
ls | grep "\.img" | while read i; do
line=$(echo "$i" | cut -d"." -f1)
echo "package_extract_file("\"firmware-update/$line.img"\", "\"/dev/block/bootdevice/by-name/$line"_a""\");">>updater-script1
echo "package_extract_file("\"firmware-update/$line.img"\", "\"/dev/block/bootdevice/by-name/$line"_b""\");">>updater-script1
done
if [[ ! $zstd1 = "1" ]]; then
echo >>updater-script2
echo "ui_print("\"Patching super partition..."\");">>updater-script2
echo block_image_update\(\"/dev/block/bootdevice/by-name/super\", package_extract_file\(\"firmware-update/super.transfer.list\"\), \"firmware-update/super.new.dat.br\", \"firmware-update/super.patch.dat\"\) \|\|>>updater-script2
echo abort\(\"E1001: Failed to flash super partition.\"\)\;>>updater-script2
else
echo "package_extract_zstd "\"firmware-update/super.zst"\" "\"/dev/block/bootdevice/by-name/super"\"">>updater-script2
fi
cat updater-script1 updater-script2 updater-script3 >updater-script
rm -rf updater-script1 updater-script2 updater-script3
cd $base
mkdir -p $tempp/META-INF/com/google/android >/dev/null 2>&1
mv -f $tempp/output/updater-script $tempp/META-INF/com/google/android/ >/dev/null 2>&1
mv -f $tempp/output/dynamic_partitions_op_list $tempp/ >/dev/null 2>&1
cp -rf bin/apk/update-binary-bin $tempp/META-INF/com/google/android/update-binary >/dev/null 2>&1
}
checkpath
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。