mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-06-12 13:17:39 +02:00
Add new build command avd_patch
This commit is contained in:
75
build.py
75
build.py
@ -383,24 +383,6 @@ def build_stub(args):
|
||||
build_apk(args, 'stub')
|
||||
|
||||
|
||||
def build_snet(args):
|
||||
if not op.exists(op.join('stub', 'src', 'main', 'java', 'com', 'topjohnwu', 'snet')):
|
||||
error('snet sources have to be bind mounted on top of the stub folder')
|
||||
header('* Building snet extension')
|
||||
proc = execv([gradlew, 'stub:assembleRelease'])
|
||||
if proc.returncode != 0:
|
||||
error('Build snet extention failed!')
|
||||
source = op.join('stub', 'build', 'outputs', 'apk',
|
||||
'release', 'stub-release.apk')
|
||||
target = op.join(config['outdir'], 'snet.jar')
|
||||
# Extract classes.dex
|
||||
with zipfile.ZipFile(target, 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=False) as zout:
|
||||
with zipfile.ZipFile(source) as zin:
|
||||
zout.writestr('classes.dex', zin.read('classes.dex'))
|
||||
rm(source)
|
||||
header('Output: ' + target)
|
||||
|
||||
|
||||
def cleanup(args):
|
||||
support_targets = {'native', 'java'}
|
||||
if args.target:
|
||||
@ -470,13 +452,54 @@ def setup_avd(args):
|
||||
|
||||
abi = cmd_out([adb_path, 'shell', 'getprop', 'ro.product.cpu.abi'])
|
||||
proc = execv([adb_path, 'push', f'native/out/{abi}/busybox', 'out/app-debug.apk',
|
||||
'scripts/emulator.sh', '/data/local/tmp'])
|
||||
'scripts/avd_magisk.sh', '/data/local/tmp'])
|
||||
if proc.returncode != 0:
|
||||
error('adb push failed!')
|
||||
|
||||
proc = execv([adb_path, 'shell', 'sh', '/data/local/tmp/emulator.sh'])
|
||||
proc = execv([adb_path, 'shell', 'sh', '/data/local/tmp/avd_magisk.sh'])
|
||||
if proc.returncode != 0:
|
||||
error('emulator.sh failed!')
|
||||
error('avd_magisk.sh failed!')
|
||||
|
||||
|
||||
def patch_avd_ramdisk(args):
|
||||
build_binary(args)
|
||||
build_app(args)
|
||||
|
||||
header('* Patching emulator ramdisk.img')
|
||||
|
||||
# Create a backup to prevent accidental overwrites
|
||||
backup = args.ramdisk + '.bak'
|
||||
if not op.exists(backup):
|
||||
cp(args.ramdisk, backup)
|
||||
|
||||
ini = op.join(op.dirname(args.ramdisk), 'advancedFeatures.ini')
|
||||
with open(ini, 'r') as f:
|
||||
adv_ft = f.read()
|
||||
|
||||
# Need to turn off system as root
|
||||
if 'SystemAsRoot = on' in adv_ft:
|
||||
# Create a backup
|
||||
cp(ini, ini + '.bak')
|
||||
adv_ft = adv_ft.replace('SystemAsRoot = on', 'SystemAsRoot = off')
|
||||
with open(ini, 'w') as f:
|
||||
f.write(adv_ft)
|
||||
|
||||
abi = cmd_out([adb_path, 'shell', 'getprop', 'ro.product.cpu.abi'])
|
||||
proc = execv([adb_path, 'push', f'native/out/{abi}/busybox', 'out/app-debug.apk',
|
||||
'scripts/avd_patch.sh', '/data/local/tmp'])
|
||||
if proc.returncode != 0:
|
||||
error('adb push failed!')
|
||||
proc = execv([adb_path, 'push', backup, '/data/local/tmp/ramdisk.cpio.gz'])
|
||||
if proc.returncode != 0:
|
||||
error('adb push failed!')
|
||||
|
||||
proc = execv([adb_path, 'shell', 'sh', '/data/local/tmp/avd_patch.sh'])
|
||||
if proc.returncode != 0:
|
||||
error('avd_patch.sh failed!')
|
||||
|
||||
proc = execv([adb_path, 'pull', '/data/local/tmp/ramdisk.cpio.gz', args.ramdisk])
|
||||
if proc.returncode != 0:
|
||||
error('adb pull failed!')
|
||||
|
||||
|
||||
def build_all(args):
|
||||
@ -512,13 +535,13 @@ stub_parser = subparsers.add_parser('stub', help='build the stub app')
|
||||
stub_parser.set_defaults(func=build_stub)
|
||||
|
||||
avd_parser = subparsers.add_parser(
|
||||
'emulator', help='build and setup AVD for development')
|
||||
'emulator', help='setup AVD for development')
|
||||
avd_parser.set_defaults(func=setup_avd)
|
||||
|
||||
# Need to bind mount snet sources on top of stub folder
|
||||
# Note: source code for the snet extension is *NOT* public
|
||||
snet_parser = subparsers.add_parser('snet', help='build snet extension')
|
||||
snet_parser.set_defaults(func=build_snet)
|
||||
avd_patch_parser = subparsers.add_parser(
|
||||
'avd_patch', help='patch AVD ramdisk.img')
|
||||
avd_patch_parser.add_argument('ramdisk', help='path to ramdisk.img')
|
||||
avd_patch_parser.set_defaults(func=patch_avd_ramdisk)
|
||||
|
||||
clean_parser = subparsers.add_parser('clean', help='cleanup')
|
||||
clean_parser.add_argument(
|
||||
|
Reference in New Issue
Block a user