Найти в Дзене
mamaich

Как сменить имя package внутри APK файла

Данную статью не стоит принимать, как универсальную инструкцию.

Для ряда программ достаточно просто изменить "package=" в файле AndroidManifest.xml. Для других - даже просто разобрать APK с помощью apktool и собрать без изменений ей же назад в пакет - уже приведет к проблемам. Так что вопрос этой темы - очень творческий, и описать его в одной статье просто невозможно.

Описанный ниже способ сработал на Lampa, с небольшими изменениями на FX File Explorer, но на ряде приложений, например, на MiXplorer он не приводит к результату.

--------------------------------------------------------------------------------------

Для установки пакетов на устройства с урезанным маркетплейсом, может потребоваться поменять имя пакета внутри APK.

Опишу как превратить APK файл от Lampa в, например, IPTV Portal.
Я пробовал готовые утилиты, переименовывающие пакеты - однако с ними у меня именно Лампа не заработала. Зато вручную всё прошло гладко.

Для ручного переименования потребуются утилиты apktool (чтобы "разобрать" и потом "собрать назад" APK), apksigner (подойдет любая утилита, подписывающая готовые АРК).


1. Разбираем APK Лампы на составляющие:

java.exe -jar apktool_2.9.3.jar d lampa.apk

Будет создана папка lampa с развернутым и готовым для редактирования содержимым АРК.

2. В папке правим файл AndroidManifest.xml, в самой первой строке заменяем package="top.rootu.lampa" (название пакета лампы) на package="ru.iptvportal.stb". Другие строки не трогаем. В инструкциях, бродящих по интернету, правят также файл apktool.yml - но у меня в нем строк с именем пакета не было.

3. Идем в папки smali, smali_classes2, smali_classes3 и тд. Находим в них папки, принадлежащие Лампе (top/rootu/lampa) и копируем их в папки с названием подменяемого приложения (ru/iptvportal/stb). Именно копируем, а не переименовываем, как делают некоторые утилиты. Таким образом мы сохраняем старые классы - повышаем шанс, что пакет потом заработает.

См скриншот, слева оригинальный путь, справа новый:

и так по всем папкам smali*
и так по всем папкам smali*

4. А теперь самое ответственное. Внутри всех файлов в "новых" папках smali*/ru/iptvportal/stb ищем строку "Ltop/rootu/lampa" (без кавычек, L заглавная, после нее имя класса Лампы, разделенное слешами) и заменяем на "Lru/iptvportal/stb" (тоже без кавычек). Меняем везде:

-2

Данное действие проводим только над новыми файлами в папках smali, созданными в пункте 3, другие файлы и папки не трогаем!

4.1 Добавлено 17.12.2024: требуется также поправить файл AndroidMainfest.xml. Везде где в строках указано относительное имя класса (например, строки вида android:value=".some.string") надо поменять на полное имя класса относительно оригинального имени пакета (android:value="top.rootu.lampa.some.string").

5. Собираем APK назад:

java.exe -jar apktool_2.9.3.jar b lampa

Новый APK будет лежать в папке lampa/dist.

6. Подписываем APK.

java.exe -jar apksigner.jar sign --ks mykey.jks lampa/dist/lampa.apk


После чего тестируем и убеждаемся, что Лампа заработала, но в списке пакетов у нее числится класс ru.iptvportal.stb.