但是,难道从没有人测试过,Android 系统能够接受安装的最长软件包名是多少吗? 理论上,包名应该能够达到 Linux 限制的 PATH_MAX,即 255 字节左右(这里不计算 Android 在软件安装路径上加的随机字符,但这个是重要的
好像没有,那么,自己动手,丰衣足食
Start:
刚开始我找来一个无加固软件开始改包名,50?100?150?
很快,所有图形 Apk 修改工具能够修改的最长包名已经达到了,超不过 180 字节
这当然不是终点,既然修改不行,那就从源头编译! 一番测试编译…
当最后一次将包名长度增至 246 时,终于报错了((
1 2 3
* What went wrong: Execution failed for task ':app:dataBindingGenBaseClassesDebug'. > java.io.FileNotFoundException: MyBasicActivity/app/build/intermediates/data_binding_base_class_log_artifact/debug/dataBindingGenBaseClassesDebug/out/com.imtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.app-binding_classes.json (File name too long)
这个报错很明显,构建工具在尝试以Apk包名作为基础名称创建一个 json 文件,但明显超过了 Linux 限制的长度 255 解决方法:build.gradle 改一下:
* What went wrong: Execution failed for task ':app:processDebugResources'. > A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction > Android resource linking failed ERROR: MyBasicActivity/app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/AndroidManifest.xml:2: AAPT: error: attribute 'package' in <manifest> tag is not a valid Android package name: 'com.imtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.app'.
~ 构建工具 aapt 抛出的异常
这应该是构建工具能达到的最长包名了(?
既然编译也走不通了,常见改包名方法也就剩下 apktool、16 进制编辑器了
先试试 apktool
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
root@localhost ~/kotlin# apktool d app-debug.apk -o app_dir I: Using Apktool 2.7.0-dirty on app-debug.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: /root/.local/share/apktool/framework/1.apk I: Renamed manifest package found! Replacing com.imtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.app with com.imtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttestt I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Baksmaling classes2.dex... I: Baksmaling classes3.dex... I: Baksmaling classes4.dex... I: Baksmaling classes5.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files... I: Copying META-INF/services directory root@localhost ~/kotlin#
解压后修改相关 xml、文件内包名 重新打包又炸了:
1
brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [aapt, p, --min-sdk-version, 21, --target-sdk-version, 34, --rename-manifest-package, com.imtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.ap
12-06 17:57:52.150 24465 24625 I ActivityManager: START u0 {act=android.intent.action.VIEW dat=file:///data/user_de/0/com.android.packageinstaller/no_backup/package2365387567240456731.apk flg=0x10000 cmp=com.android.packageinstaller/.PackageInstallerActivity (has extras)} from uid 10009 12-06 17:57:52.344 24977 24977 I PackageInstaller: No source found for package com.imtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.app
17:57:52.344:PackageInstaller 爆出了一个错误:No source found for package com.imtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.app
12-06 18:00:40.537 24465 24670 W Watchdog: Failed to write to /proc/sysrq-trigger 12-06 18:00:40.537 24465 24670 W Watchdog: java.io.FileNotFoundException: /proc/sysrq-trigger (Permission denied) 12-06 18:00:40.537 24465 24670 W Watchdog: at java.io.FileOutputStream.open0(Native Method) 12-06 18:00:40.537 24465 24670 W Watchdog: at java.io.FileOutputStream.open(FileOutputStream.java:287) 12-06 18:00:40.537 24465 24670 W Watchdog: at java.io.FileOutputStream.<init>(FileOutputStream.java:223) 12-06 18:00:40.537 24465 24670 W Watchdog: at java.io.FileOutputStream.<init>(FileOutputStream.java:110) 12-06 18:00:40.537 24465 24670 W Watchdog: at java.io.FileWriter.<init>(FileWriter.java:63) 12-06 18:00:40.537 24465 24670 W Watchdog: at com.android.server.Watchdog.doSysRq(Watchdog.java:586) 12-06 18:00:40.537 24465 24670 W Watchdog: at com.android.server.Watchdog.run(Watchdog.java:518) 12-06 18:00:40.538 24465 24670 W Watchdog: Failed to write to /proc/sysrq-trigger 12-06 18:00:40.538 24465 24670 W Watchdog: java.io.FileNotFoundException: /proc/sysrq-trigger (Permission denied) 12-06 18:00:40.538 24465 24670 W Watchdog: at java.io.FileOutputStream.open0(Native Method) 12-06 18:00:40.538 24465 24670 W Watchdog: at java.io.FileOutputStream.open(FileOutputStream.java:287) 12-06 18:00:40.538 24465 24670 W Watchdog: at java.io.FileOutputStream.<init>(FileOutputStream.java:223) 12-06 18:00:40.538 24465 24670 W Watchdog: at java.io.FileOutputStream.<init>(FileOutputStream.java:110) 12-06 18:00:40.538 24465 24670 W Watchdog: at java.io.FileWriter.<init>(FileWriter.java:63) 12-06 18:00:40.538 24465 24670 W Watchdog: at com.android.server.Watchdog.doSysRq(Watchdog.java:586) 12-06 18:00:40.538 24465 24670 W Watchdog: at com.android.server.Watchdog.run(Watchdog.java:519) 12-06 18:00:40.581 24465 24670 W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in handler on PackageManager (PackageManager) 12-06 18:00:40.581 24465 24670 W Watchdog: PackageManager stack trace: 12-06 18:00:40.582 24465 24670 W Watchdog: at java.io.UnixFileSystem.checkAccess0(Native Method) 12-06 18:00:40.582 24465 24670 W Watchdog: at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:252) 12-06 18:00:40.582 24465 24670 W Watchdog: at java.io.File.exists(File.java:807) 12-06 18:00:40.582 24465 24670 W Watchdog: at com.android.server.pm.PackageManagerService.getNextCodePath(PackageManagerService.java:17613) 12-06 18:00:40.582 24465 24670 W Watchdog: at com.android.server.pm.PackageManagerService.-wrap19(Unknown Source:0) 12-06 18:00:40.582 24465 24670 W Watchdog: at com.android.server.pm.PackageManagerService$FileInstallArgs.doRename(PackageManagerService.java:17029) 12-06 18:00:40.582 24465 24670 W Watchdog: at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:18927) 12-06 18:00:40.582 24465 24670 W Watchdog: at com.android.server.pm.PackageManagerService.installPackageTracedLI(PackageManagerService.java:18528) 12-06 18:00:40.582 24465 24670 W Watchdog: at com.android.server.pm.PackageManagerService.-wrap33(Unknown Source:0) 12-06 18:00:40.582 24465 24670 W Watchdog: at com.android.server.pm.PackageManagerService$8.run(PackageManagerService.java:15989) 12-06 18:00:40.582 24465 24670 W Watchdog: at android.os.Handler.handleCallback(Handler.java:790) 12-06 18:00:40.582 24465 24670 W Watchdog: at android.os.Handler.dispatchMessage(Handler.java:99) 12-06 18:00:40.582 24465 24670 W Watchdog: at android.os.Looper.loop(Looper.java:164) 12-06 18:00:40.582 24465 24670 W Watchdog: at android.os.HandlerThread.run(HandlerThread.java:65) 12-06 18:00:40.582 24465 24670 W Watchdog: at com.android.server.ServiceThread.run(ServiceThread.java:46) 12-06 18:00:40.582 24465 24670 W Watchdog: *** GOODBYE! 12-06 18:00:40.583 24465 24670 I Process : Sending signal. PID: 24465 SIG: 9