Как установить два одинаковых приложения на один телефон Андроид
- Дата обновления18-10-2023, 20:32
- КатегорияFAQ
Для установки двух (или больше) одинаковых приложений на один телефон нужно сменить значение package в файле AndroidManifest.xml, находящемся внутри apk-билда.
Например, у нас имеется такое:
<manifest
android:versioncode="20110420"
android:versionname="1.8.0"
package="ru.bamd"
xmlns:android="http://schemas.android.com/apk/res/android">
Для того, чтобы установить это приложение ещё раз, нужно сделать примерно следующее:
<manifest
android:versioncode="20110420"
android:versionname="1.8.0"
package="ru.bamd.new"
xmlns:android="http://schemas.android.com/apk/res/android">
После такого изменения заново собранный apk-файл придётся подписать сертификатом. Информацию о том, как распаковывать, запаковывать и подписывать apk-файлы, можно найти в любом поисковике по запросу SmartApkTool.
Возможные проблемы
Проблема 1
Если рядом с AndroidManifest.xml не создаётся файл apktool.yml, то в домашней директории пользователя найдите папку apktool\framework и удалите из неё файл 1.apk.
Проблема 2
Иногда обычная смена имени package не помогает. Чаще всего это бывает в случаях, когда в файле AndroidManifest.xml прописаны относительные пути к различным активити. Например:
<activity
android:label="BAMD"
android:name=".SplashScreenActivity"
android:screenOrientation="portrait">
В такой ситуации нужно прописать полный путь ко всем активити, то есть:
<activity
android:label="BAMD"
android:name="ru.bamd.SplashScreenActivity"
android:screenOrientation="portrait">
Обратите внимание, что прописывать нужно не новое имя package (то есть в нашем случае не ru.bamd.new), а реальный путь к активити в директории smali распакованного apk-файла. Естественно, в общем случае путь совпадает со старым именем package (в нашем случае это new).
Проблема 3
Если в файле AndroidManifest.xml есть тег provider, то в его атрибуте authorities нужно также дописать символы, которые мы использовали в качестве дополнения к параметру package (в нашем случае это .test). Например, было:
<provider
android:authorities="com.someapp.android"
android:name="com.someapp.android">
Стало:
<provider
android:authorities="com.someapp.android.new"
android:name="com.someapp.android">
Как и в проблеме 2, значение атрибута name менять не надо.