首页 > 其他分享 >Android Studio 模拟器 安卓12 安装Magisk

Android Studio 模拟器 安卓12 安装Magisk

时间:2024-03-26 22:44:57浏览次数:32  
标签:ramdisk 12 安卓 echo APK shell adb Studio TMPDIR

本文脚本修改自github上的一个脚本
环境为Mac OS-Arm版

1. 创建一个目录

mkdir magisk-sh

2. 下载Magisk apk

可以去github上下载,链接:https://github.com/topjohnwu/Magisk/releases
本文采用v26.1版本
下载完成之后,可以直接拖入模拟器中安装
还需要将magisk apk文件放入刚才创建的目录中

3. 编写脚本

脚本后缀名为.sh
脚本仅供参考,有些地方需要修改

  • 修改APILEVEL为自己的
  • 修改APK为自己的,注意要有版本号,没有要修改一些东西
  • 修改RAMDISK,如果是从Android Studio中下载的sdk和模拟器的话,只需要修改system-images目录后面的就行了,其他的自行寻找目录
  • 需要注意修改4,其中arm64-v8a是arm版的目录,不同架构的需要修改成对应的架构,如x86_64
# 修改1
APILEVEL=31
# 修改2
APK="Magisk-v26.1"

TMPDIR="/data/local/tmp/.magisk"
# 修改3
RAMDISK="/Users/toycon/Library/Android/sdk/system-images/android-31/google_apis/arm64-v8a/ramdisk.img"

  

yellow=`tput setaf 3`

green=`tput setaf 2`

red=`tput setaf 1`

reset=`tput sgr0`

  

echo "${green}[*] Using APK ${APK}.apk"

echo "[*] Emulator temp dir is ${TMPDIR}"

echo "[*] RAMDISK image to patch is ${RAMDISK}${reset}"

  

rm -fr "${APK}"

  

echo "${yellow}[+] Extracting Magisk APK...${reset}"

apktool d -r -s "${APK}.apk"

  

echo "${yellow}[*] Testing ADB access...${reset}"

adb shell uname -a

if [ $? -eq 0 ]; then

echo "${green}[*] ADB access seems to be working. Proceeding..."

else

echo "${red}[!] ADB access error. Aborted.${reset}"

exit 1

fi

  

echo "${yellow}[+] Pushing required files from APK to device TEMP folder${reset}"

adb shell "rm -fr ${TMPDIR}"

adb shell "mkdir ${TMPDIR}"

  
# 修改4
adb push "${APK}/lib/arm64-v8a/libmagiskboot.so" "${TMPDIR}/magiskboot"

adb push "${APK}/lib/arm64-v8a/libmagiskinit.so" "${TMPDIR}/magiskinit"

adb push "${APK}/lib/arm64-v8a/libmagisk64.so" "${TMPDIR}/magisk64"

adb push "${APK}/assets/stub.apk" "${TMPDIR}/stub.apk"

  

adb shell "chmod +x ${TMPDIR}/magiskboot"

adb shell "chmod +x ${TMPDIR}/magisk64"

  

echo "${yellow}[+] Prepatching and uploading 2-staged RAMDISK (into single staged version)${reset}"

lz4cat "${RAMDISK}" | bbe -b '/070701000493e6000001ed0000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!!/:/07070100/' -e 'D;A 07070100' | adb shell "cat > ${TMPDIR}/ramdisk.cpio"

  

adb shell "cd ${TMPDIR}; cp -af ramdisk.cpio ramdisk.cpio.orig"

  

echo "${yellow}[+] RAMDISK is ready to patch!${reset}"

  

adb shell "echo KEEPVERITY=true > ${TMPDIR}/config"

adb shell "echo KEEPFORCEENCRYPT=true >> ${TMPDIR}/config"

adb shell "echo PREINITDEVICE=\$(${TMPDIR}/magisk64 --preinit-device) >> ${TMPDIR}/config"

adb shell "cd ${TMPDIR}; ./magiskboot compress=xz magisk64 magisk64.xz"

adb shell "cd ${TMPDIR}; ./magiskboot compress=xz stub.apk stub.xz"

  

echo "${yellow}[+] Patching MAGISK to RAMDISK${reset}"

adb shell "cd ${TMPDIR}; KEEPVERITY=true KEEPFORCEENCRYPT=true ./magiskboot cpio ramdisk.cpio \"add 0750 init magiskinit\" \"mkdir 0750 overlay.d\" \"mkdir 0750 overlay.d/sbin\" \"add 0644 overlay.d/sbin/magisk64.xz magisk64.xz\" \"add 0644 overlay.d/sbin/stub.xz stub.xz\" \"patch\" \"backup ramdisk.cpio.orig\" \"mkdir 000 .backup\" \"add 000 .backup/.magisk config\""

  

echo "${yellow}[+] Pulling and compressing patched RAMDISK and cleaning up files on device${reset}"

adb shell "cat ${TMPDIR}/ramdisk.cpio" | gzip -c - > ramdisk-patched.img

  

adb shell "rm -fr ${TMPDIR}"

  

echo "${green}[*] MAGISK patched RAMDISK image is available: ramdisk-patched.img"

echo "[*] Run emulator with option '-ramdisk ramdisk-patched.img'${reset}"

4. 保存并运行

cd magisk-sh
sh ./magisk-install.sh

5. 运行问题及解决

... : command not found.

缺什么安装什么
比如:我在运行时缺apktoolbbe,通过 homebrew 安装即可

brew install apktool
brew install bbe

若未安装 homebrew ,可自行上网搜索安装,或安装其他缺失的软件。

6. 将ramdisk.img复制到模拟器目录

cp ./ramdisk-patched.img /Users/toycon/Library/Android/sdk/system-images/android-31/google_apis/arm64-v8a/ramdisk.img

重启模拟器即可,然后就能看到Magisk安装成功了

标签:ramdisk,12,安卓,echo,APK,shell,adb,Studio,TMPDIR
From: https://www.cnblogs.com/toycon/p/18097813

相关文章

  • [20240325]expand_sql_text dba_hist_sysstat(12c).txt
    [20240325]expand_sql_textdba_hist_sysstat(12c).txt--//前几天测试dba_hist_sysdate的底层视图定义里面包含提示.--//测试一条sql语句包含dba_hist_sysstat使用expand_sql_text的展开情况.1.环境:SYS@test>@ver1PORT_STRING                   VERSION ......
  • 十八 1265. 数星星 (树状数组)
    1265.数星星(树状数组)思路:本题要统计每个星星左下角星星的数目,由于星星按y坐标增序给出,y坐标相同的按x坐标增序给出,所以不用关注y,可以视作每个x位置有几颗星星就为几的数组,每次统计左侧前缀和,再将当前计算的星星x位置数加一,使用树状数组(推荐视频:五分钟丝滑动画讲解|树状数......
  • 一口气搞懂分库分表 12 种分片算法,大厂都在用
    大家好,我是小富~前言本文是《ShardingSphere5.x分库分表原理与实战》系列的第五篇文章,我们一起梳理下ShardingSphere框架中的核心部分分片策略和分片算法,其内部针为我们提供了多种分片策略和分片算法,来应对不同的业务场景,本着拿来即用的原则。这次将详细介绍如何在ShardingSpher......
  • MySQL ERROR 1227 (42000)错误处理
    在还原数据库的时候,遇到以下报错:ERROR1227(42000)atline18:Accessdenied;youneed(atleastoneof)theSUPER,SYSTEM_VARIABLES_ADMINorSESSION_VARIABLES_ADMINprivilege(s)forthisoperation从错误信息看,似乎是用户权限不够。但是,实际上不是权限的问题。解......
  • CF1271E - Common Number |
    links设\(f(x)=\begin{cases}x-1,&x\mod2=1\\\dfrac{x}{2},&x\mod2=0\\\end{cases}\)若将一个数\(x\)不断赋值为\(f(x)\)直到\(x=1\),则在这个过程中出现的数的集合我们称之为\(path(x)\),如\(path(7)=\{7,6,3,2,1\}\),\(path(4)=......
  • CF1270B - Interesting Subarray | 思维
    links给出一个长度为\(n\)的序列\(a_1,a_2,\cdots,a_n\),求一子段\(a_l,a_{l+1},a_{l+2},\cdots,a_{r-1},a_r\),满足\(\max\{a_l,\cdots,a_r\}-\min\{a_l,\cdots,a_r\}\geqr-l+1\)。若有多个,输出任意一个子段的左右端点即可。若不存在,输出NO。\(n\leq......
  • 华为数通方向HCIP-DataCom H12-821题库(多选题:181-200)
    第181题在BGP中Community属性为可选过渡属性,是一种路由标记,用于简化路由策略的执行。它分为自定义团体属性和公共团体属性,那么以下属于公共团体属性的是哪些项?A、No_Export_SubconfedB、No_AdvertiseC、No_ExportD、Internet【正确答案】ABCD【答案解析】第182......
  • 安装图形化界面时候报错 Transaction check error: file /boot/efi/EFI/centos from
    报错Transactioncheckerror:file/boot/efi/EFI/centosfrominstalloffwupdate-efi-12-5.el7.centos.x86_64conflictswithfilefrompackagegrub2-common-1:2.02-0.65.el7.centos.2.noarch如果在安装过程出现类似这种错误:Transactioncheckerror:file/boot/efi/EFI......
  • ccf-csp-2020-12-2期末预测之最佳阈值(c++满分题解)
    这个题暴力是可以有70分的,下面是暴力代码:(注释写的比较清楚了,也很好理解)#include<iostream>#include<vector>#include<set>#include<algorithm>usingnamespacestd;boolsort1(pair<int,int>vec1,pair<int,int>vec2)//对阈值从小到大排序{ returnvec1.first<=ve......
  • 125.验证回文串
    回顾用的,原题链接:.-力扣(LeetCode)如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。......