mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-29 12:17:39 +00:00
32faa4ced6
The test APK and the main APK share the same process and classloader, and in the non-hidden case, the test APK's classes take precedence over the ones in the main APK. This causes issues because the test APK and main APK share some dependencies, but don't always use the same version. This is especially problematic for the Kotlin stdlib and AndroidX dependencies. The solution here is to rely on R8's obfuscation feature and repackage all potentially conflicting classes into a separate package in the test APK. To ensure that the test classes are always using the same classes as the main APK, we have to directly implement all tests inside the main APK, making the test APK purely a "test runner with test dependencies". As a result, the test APK can only be used when built in release mode, because R8 no longer allow class obfuscation to be enabled when building for debug versions.