feat: Faster dex rebuilding + reduced memory requirements #108
feat: Faster dex rebuilding + reduced memory requirements #108
Conversation
|
Hello there ~~ When I use arg Initializing ADB Logcat stream...
Mode: App Crash Detection (AndroidRuntime)
------------------------------------------------
--------- beginning of crash
04-07 17:00:54.944 10348 10348 E AndroidRuntime: FATAL EXCEPTION: main
04-07 17:00:54.944 10348 10348 E AndroidRuntime: Process: com.twitter.android, PID: 10348
04-07 17:00:54.944 10348 10348 E AndroidRuntime: java.lang.RuntimeException: Unable to instantiate application com.twitter.app.TwitterApplication package com.twitter.android: java.lang.ClassNotFoundException: Didn't find class "com.twitter.app.TwitterApplication" on path: DexPathList[[zip file "/data/app/~~JiUOvhIPm4D3Hvb992GFNw==/com.twitter.android-nGP60pEVRP4Z9wfHjST0hA==/base.apk"],nativeLibraryDirectories=[/data/app/~~JiUOvhIPm4D3Hvb992GFNw==/com.twitter.android-nGP60pEVRP4Z9wfHjST0hA==/lib/arm64, /data/app/~~JiUOvhIPm4D3Hvb992GFNw==/com.twitter.android-nGP60pEVRP4Z9wfHjST0hA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1522)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1443)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:8155)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2658)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:107)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:249)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.os.Looper.loop(Looper.java:337)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:9469)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:636)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1005)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.twitter.app.TwitterApplication" on path: DexPathList[[zip file "/data/app/~~JiUOvhIPm4D3Hvb992GFNw==/com.twitter.android-nGP60pEVRP4Z9wfHjST0hA==/base.apk"],nativeLibraryDirectories=[/data/app/~~JiUOvhIPm4D3Hvb992GFNw==/com.twitter.android-nGP60pEVRP4Z9wfHjST0hA==/lib/arm64, /data/app/~~JiUOvhIPm4D3Hvb992GFNw==/com.twitter.android-nGP60pEVRP4Z9wfHjST0hA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:642)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:578)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.app.Instrumentation.newApplication(Instrumentation.java:1355)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1515)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: ... 11 more
04-07 17:00:54.944 10348 10348 E AndroidRuntime: Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/work/b$c;
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at java.lang.VMClassLoader.findLoadedClass(Native Method)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:1281)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
04-07 17:00:54.944 10348 10348 E AndroidRuntime: ... 15 more
04-07 17:00:54.944 10348 10348 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: androidx.work.b$c
04-07 17:00:54.944 10348 10348 E AndroidRuntime: ... 18 moreBut, when I select |
|
Do you see this with STRIP_SAFE? |
Still crashing Initializing ADB Logcat stream...
Mode: App Crash Detection (AndroidRuntime)
------------------------------------------------
--------- beginning of crash
04-08 07:11:08.974 12736 12736 E AndroidRuntime: FATAL EXCEPTION: main
04-08 07:11:08.974 12736 12736 E AndroidRuntime: Process: com.twitter.android, PID: 12736
04-08 07:11:08.974 12736 12736 E AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/jvm/functions/Function0;
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at com.twitter.app.di.ComponentFactory.b(Unknown Source:0)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at androidx.core.app.b.instantiateApplication(Unknown Source:0)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at android.app.Instrumentation.newApplication(Instrumentation.java:1355)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1515)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1443)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:8155)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2658)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:107)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:249)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at android.os.Looper.loop(Looper.java:337)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:9469)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:636)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1005)
04-08 07:11:08.974 12736 12736 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: kotlin.jvm.functions.Function0
04-08 07:11:08.974 12736 12736 E AndroidRuntime: ... 15 more
------------------------------------------------
Logcat capture stopped.Full patching log: ============================================================
>>> LOG FOR: X_Twitter (v11.79.0-release.0) <<<
============================================================
INFO: Loading patches
INFO: Reading options from x-twitter-options-dev.json
INFO: Merging split APK bundle
INFO: Extracting to: C:\Apks\Piko\Input\tmp_dd221af1
INFO: Searching apk files ...
INFO: Found apk files: 36
INFO: Found modules: 36
INFO: Merging: base
INFO: Added [base] classes.dex -> classes.dex
INFO: Added [base] classes2.dex -> classes2.dex
INFO: Added [base] classes3.dex -> classes3.dex
INFO: Added [base] classes4.dex -> classes4.dex
INFO: Added [base] classes5.dex -> classes5.dex
INFO: Added [base] classes6.dex -> classes6.dex
INFO: Added [base] classes7.dex -> classes7.dex
INFO: Added [base] classes8.dex -> classes8.dex
INFO: Added [base] classes9.dex -> classes9.dex
INFO: Added [base] classes10.dex -> classes10.dex
INFO: Added [base] classes11.dex -> classes11.dex
INFO: Added [base] classes12.dex -> classes12.dex
INFO: Added [base] classes13.dex -> classes13.dex
INFO: Added [base] classes14.dex -> classes14.dex
INFO: Merging: split_config.sv
INFO: Merging: split_config.ko
INFO: Merging: split_config.arm64_v8a
INFO: Merging: split_config.in
INFO: Merging: split_config.ms
INFO: Merging: split_config.vi
INFO: Merging: split_config.th
INFO: Merging: split_config.ar
INFO: Merging: split_config.ja
INFO: Merging: split_config.xxhdpi
INFO: Merging: split_config.it
INFO: Merging: split_config.xxxhdpi
INFO: Merging: split_config.en
INFO: Merging: split_config.mdpi
INFO: Merging: split_config.es
INFO: Merging: split_config.iw
INFO: Merging: split_config.zh
INFO: Merging: split_config.fi
INFO: Merging: split_config.ru
INFO: Merging: split_config.x86
INFO: Merging: split_config.pt
INFO: Merging: split_config.de
INFO: Merging: split_config.hi
INFO: Merging: split_config.x86_64
INFO: Merging: split_config.pl
INFO: Merging: split_config.nl
INFO: Merging: split_config.tr
INFO: Merging: split_config.ldpi
INFO: Merging: split_config.tvdpi
INFO: Merging: split_config.xhdpi
INFO: Merging: split_config.uk
INFO: Merging: split_config.fr
INFO: Merging: split_config.hdpi
INFO: Merging: split_config.armeabi_v7a
INFO: Merging: split_config.hu
INFO: Validating resources dir ...
INFO: Clearing META-INF ...
INFO: Sanitizing manifest ...
INFO: Setting extractNativeLibs=false
INFO: Writing apk ...
INFO: Buffering compress changed files ...
INFO: Writing files: 7521
INFO: Saved to: C:\Apks\Piko\.\Output\com.twitter.android-11.79.0-release.0-311790000-universal-merged.apk
INFO: Setting patch options
INFO: "Bring back twitter" disabled via options file
INFO: "Disunify xchat system" disabled via options file
INFO: "Dynamic color" disabled via options file
INFO: "Browse tweet object" disabled via options file
INFO: "Export all activities" disabled via options file
INFO: Decoding all resources
INFO: Sanitizing unpatched strings
INFO: Escaping strings
INFO: Executing patches
INFO: "Add ability to copy media link" succeeded
INFO: "Change app icon" succeeded
INFO: "Change version code" succeeded
INFO: "Clear tracking params" succeeded
INFO: "Control video auto scroll" succeeded
INFO: "Custom download folder" succeeded
INFO: "Custom emoji font" succeeded
INFO: "Custom font" succeeded
INFO: "Custom sharing domain" succeeded
INFO: "Customise post font size" succeeded
INFO: "Customize Inline action Bar items" succeeded
INFO: "Customize Navigation Bar items" succeeded
INFO: "Customize default reply sorting" succeeded
INFO: "Customize explore tabs" succeeded
INFO: "Customize notification tabs" succeeded
INFO: "Customize profile tabs" succeeded
INFO: "Customize search suggestions" succeeded
INFO: "Customize search tab items" succeeded
INFO: "Customize side bar items" succeeded
INFO: "Customize timeline top bar" succeeded
INFO: "Delete from database" succeeded
INFO: "Disable auto timeline scroll on launch" succeeded
INFO: "Disable chirp font" succeeded
INFO: "Download patch" succeeded
INFO: "Enable PiP mode automatically" succeeded
INFO: "Enable Undo Posts" succeeded
INFO: "Enable debug menu for posts" succeeded
INFO: "Enable force HD videos" succeeded
INFO: "Force enable translate" succeeded
INFO: "Handle custom twitter links" succeeded
INFO: "Hide Banner" succeeded
INFO: "Hide Community Notes" succeeded
INFO: "Hide FAB" succeeded
INFO: "Hide FAB Menu Buttons" succeeded
INFO: "Hide Live Threads" succeeded
INFO: "Hide Recommended Users" succeeded
INFO: "Hide badges from navigation bar icons" succeeded
INFO: "Hide bookmark icon in timeline" succeeded
INFO: "Hide community badges" succeeded
INFO: "Hide followed by context" succeeded
INFO: "Hide hidden replies" succeeded
INFO: "Hide immersive player" succeeded
INFO: "Hide nudge button" succeeded
INFO: "Hide post metrics" succeeded
INFO: "Hide promote button" succeeded
INFO: "Hide recommendation items" succeeded
INFO: "Hook feature flag" succeeded
INFO: "Import/Export login token" succeeded
INFO: "Legacy share links" succeeded
INFO: "Log server response" succeeded
INFO: "Native downloader" succeeded
INFO: "Native reader mode" succeeded
INFO: "Native translator" succeeded
INFO: "No shortened URL" succeeded
INFO: "Pause search suggestions" succeeded
INFO: "Remove Ads" succeeded
INFO: "Remove premium upsell" succeeded
INFO: "Remove search suggestions" succeeded
INFO: "Remove view count" succeeded
INFO: "Round off numbers" succeeded
INFO: "Selectable Text" succeeded
INFO: "Share Tweet as Image" succeeded
INFO: "Show changelogs" succeeded
INFO: "Show poll results" succeeded
INFO: "Show post source label" succeeded
INFO: "Show sensitive media" succeeded
INFO: Compiling patched dex files (mode: STRIP_SAFE)
INFO: Writing 378 modified/new classes to new DEX files
INFO: Rebuilding DEX: classes.dex (stripping 2 modified classes, keeping 16618)
INFO: Rebuilding DEX: classes7.dex (stripping 1 modified classes, keeping 16956)
INFO: Rebuilding DEX: classes8.dex (stripping 1 modified classes, keeping 7026)
INFO: Rebuilding DEX: classes9.dex (stripping 9 modified classes, keeping 19060)
INFO: Rebuilding DEX: classes10.dex (stripping 11 modified classes, keeping 19667)
INFO: Rebuilding DEX: classes11.dex (stripping 19 modified classes, keeping 14189)
INFO: Rebuilding DEX: classes12.dex (stripping 30 modified classes, keeping 19074)
INFO: Compiling modified resources
INFO: Stripping libs (keeping architectures arm64-v8a)
INFO: Stripped 88 lib files
INFO: Unescaping strings
INFO: Processing aapt macros
INFO: Generating new resource IDs
INFO: Writing resource APK
INFO: Aligning APK
INFO: Signing APK
INFO: Saved to C:\Apks\Piko\.\Output\X_Twitter_Piko_11.79.0-release.0-arm64-v8a.apk
INFO: Purging temporary files
INFO: Purged resource cache directory I am using this apkm bundle for (piko) twitter: |
|
Okay, so probably an issue somewhere with writing the modified classes to new dex files. Will take a look soon |
Okay. |
|
I get another bug with this PR Then I testing this cli https://github.com/MorpheApp/morphe-cli/releases/tag/v1.6.4-dev.2 |
|
You are running on Windows, correct? The dex files are locked while the CLI is running, so the temporary files directory cannot be cleaned up until the dex files are closed or the CLI exits. Please open a separate issue for this. I am doing development on Linux where file I/O semantics are different. |
Depends on MorpheApp/morphe-patcher#105
Reduces memory requirements for bytecode patches and speeds up dex rebuilding.
Adds flag
--bytecode-modewhich can be set toFULL- the legacy behavior, rebuilds all dex files, requires the most time and memorySTRIP_FAST- the default for CLI, fastest with least memory requirements but produces bigger APK filesSTRIP_SAFE- intended default for Manager, faster thanFULLwith somewhat reduced memory requirements, not as performant asSTRIP_FAST, similar APK file size toFULL