Copyroid

Android: как установить два одинаковых приложения на один телефон

Стол заказов — в конце статьи.

Для установки двух (или больше) одинаковых приложений на один телефон нужно сменить значение package в файле AndroidManifest.xml, находящемся внутри apk-билда.
Например, имеем:

<manifest
android:versioncode="20110420"
android:versionname="1.8.0"
package="ru.e_num"
xmlns:android="http://schemas.android.com/apk/res/android">

Для того, чтобы установить это приложение ещё раз, нужно сделать примерно следующее:

<manifest
android:versioncode="20110420"
android:versionname="1.8.0"
package="ru.e_num.test"
xmlns:android="http://schemas.android.com/apk/res/android">

После такого изменения заново собранный apk-файл придётся подписать сертификатом. Информацию о том, как распаковывать, запаковывать и подписывать apk-файлы, можно найти в любом поисковике по запросу SmartApkTool. Вот ссылка на приложение: v.2.2 (распакуйте содержимое архива в пустую директорию). А вот более правильный способ работы с apk-файлами: Использование apktool.

Совет. Устанавливайте одну из копий неизменённой, чтобы знать об обновлениях в Маркете.

Под катом описаны некоторые встречающиеся проблемы, а также находится Стол Заказов.

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Проблема 1

Если рядом с AndroidManifest.xml не создаётся файл apktool.yml, то в домашней директории пользователя найдите папку apktool\framework и удалите из неё файл 1.apk. (Совет с 4pda.ru, спасибо Alex Boroda.)

Проблема 2

Иногда обычная смена имени package не помогает. Чаще всего это бывает в случаях, когда в файле AndroidManifest.xml прописаны относительные пути к различным активити. Например:

<activity
android:label="E-NUM"
android:name=".SplashScreenActivity"
android:screenOrientation="portrait">

В такой ситуации нужно прописать полный путь ко всем активити, то есть:

<activity
android:label="E-NUM"
android:name="ru.e_num.SplashScreenActivity"
android:screenOrientation="portrait">

Обратите внимание, что прописывать нужно не новое имя package (то есть в нашем случае не ru.e_num.test), а реальный путь к активити в директории smali распакованного apk-файла. Естественно, в общем случае путь совпадает со старым именем package (в нашем случае это ru.e_num).

Проблема 3

Если в файле AndroidManifest.xml есть тег provider, то в его атрибуте authorities нужно также дописать символы, которые мы использовали в качестве дополнения к параметру package (в нашем случае это .test). Например, было:

<provider
android:authorities="com.someapp.android"
android:name="com.someapp.android">

Стало:

<provider
android:authorities="com.someapp.android.test"
android:name="com.someapp.android">

Как и в проблеме 2, значение атрибута name менять не надо.

Стол заказов

Я снова принимаю заказы! Если вы прочитали инструкцию, но у вас с ней возникли какие-то сложности, пишите в комментариях ссылку на приложение. Это обязательно! Искать «вайбер» или «клаш оф кланс» я не буду. Одну копию я делаю бесплатно. Результат не гарантирую — тестируйте. Если нужно больше копий, или есть какие-либо нестандартные пожелания — пишите в обратку, договоримся. Если хотите отблагодарить пинтой пива и за одну копию, то кошельки здесь.

PS. Пользователи *NIX-систем могут попробовать сделать копии приложений автоматически с помощью этого несложного bash-скрипта:
https://github.com/kodopik/Copyroid
Пулл-реквесты приветствуются!

2 027 thoughts on “Android: как установить два одинаковых приложения на один телефон”

  1. Здравствуйте,пока не могу вьехать ,что делаю не правильно.По вашему совету скачал последнюю версию apktool и начал декомпилировать.Прошлой ошибки уже нет но есть новая,что то говорится про PATCH. И ещё в Вашей инструкции в проблемме 3 на картинке «было» и «стало» одно и тоже .Не могли бы Вы исправить и написать как оно должно быть.Жду совета.Спасибо.

    1. Напишите ошибку полностью.
      В «Проблеме 3» представлен разный код, посмотрите внимательнее. Строка с изменениями выделена жёлтым цветом.

  2. Прошу прощения ,посмотрел через другой браузер и увидел строку полностью.По поводу ошибки,как только доберусь до компа напишу её полностью.

  3. Здравствуйте , мозги мои закипают ,не знаю что делаю не так . Приложение распаковалось , попытка 1:сменил значение package в файле AndroidManifest.xml , как написано в инструкции , приложение установилось , запустилось , но теперь не устанавливается оригинал — конфликт провайдера.Попытка 2:сменил значение package и provider как написано в инструкции ,приложение установилось но при запуске вылетает — приложение остановлено.Попытка3:меняю значение package и там где встречается такое же имя , как в Вашем клоне , приложение установилось но при запуске вылетает — приложение остановлено . Помогите мне добить этот вопрос .

    1. Пришлите Вашу копию приложения, и я скажу, что там не так.

    1. Ошибка такая:

      Failed to find provider info for com.evos.providers.CommonContentProvider

      У Вас в коде стоит провайдер:

      com.evos.top.providers.CommonContentProvider

      Рекомендую всё-таки именно в провайдере ставить либо в начале, либо в конце¹ тот текст, который Вы добавляете. Но не в середине. Например, так:

      com.evos.providers.CommonContentProvider.top

      Кстати, у Вас там есть ещё один провайдер, который будет конфликтовать, хоть и не содержит названия пакета «com.evos»:

      com.robert.top.maps.SuggestionProvider

      Там тоже нужно добавить текст «top» либо в начале, либо в конце:

      com.robert.top.maps.SuggestionProvider.top

      ¹) Если в конце не получится, попробуйте ставить «top.» в начале.

    2. Чем тестируете приложение ?
      как узнали что ошибка в

      Failed to find provider info for com.evos.providers.CommonContentProvider

    3. Поправьте меня если я не верно понял Вас, подключаете устройство к ПК (телефон или емулятор) потом, устанавливаете приложение, запускаете его: Ошибка, потом — команда ?

      adb logcat *:E

      Смотрите лог. Верно ?

    4. В момент запуска программы на телефоне утилита logcat должна работать. Потому что ошибок обычно много, и затем трудно их найти, ковыряясь в логах.
      В общем, всё происходит так:
      — подключаю телефон кабелем (или по Wi-Fi);
      — запускаю в терминале adb logcat *:E (если нужны только ошибки; если все сообщения, то просто adb logcat)$
      — запускаю приложение на телефоне;
      — смотрю на лог и останавливаю после появления ошибок с помощью Ctrl+C.

  4. Здравствуйте , спасибо ,что возитесь со мной .Сделал как Вы сказали : ставил в начале и в конце , приложение установилось , но при запуске вылетает с сообщением » приложение остановлено «. Вот ссылка на новое переделанное приложение :http://dfiles.ru/files/d2utkusal

    1. Честно сказать, уж и не знаю, что тут можно сделать. Видимо, какой-то сложный случай. Я меняю немного по-другому, не так, как в статье: не только меняю имя package, но и переношу файлы в другую папку (чтобы соблюдались пути). На самом деле, оба способа идентичны, просто один (в статье) проще для ручной обработки, а другой (тот, которым делаю я) проще для автоматической обработки с помощью моего скрипта (ссылка на него в конце статьи).

      Чтобы Вы не очень расстраивались, скажу, что вторым способом тоже не всегда получается сделать копию, и тогда я делаю вручную (как в статье). Зависит от программы. И я не всегда понимаю, что именно влияет. Правда, радует одно: подавляющее большинство программ можно сделать и тем, и другим способом. Сложные случаи достаточно редки.

      Вот ссылка на копию последней версии MobileTaxi: http://dfiles.ru/files/wunnwapv8

  5. Решил еще помучатся , теперь при сборке в apktool появились такие строки:warning:string app__user_id has no defaulttranlation.
    warning:string blank has no default translation.

    1. Должен сразу предупредить, что копия вряд ли будет правильно работать из-за особенностей авторизации таких приложений как WhatsApp, LINE, Viber и т.п.

      Вот ссылка: http://dfiles.ru/files/ww49soidw

    1. Должен сразу предупредить, что копия вряд ли будет правильно работать из-за особенностей авторизации таких приложений как WhatsApp, LINE, Viber и т.п.

      Вот ссылка: http://dfiles.ru/files/1kswij4lt

    2. Спасибо огромное! Протестируем сегодня посмотрим что получится. Отпишусь потом!

    3. К сожалению приложение хоть и установилась, запускаться отказывается. При открытии выдает ошибку что «приложение остановилась» и закрывается.
      Есть идеи как это исправить?

Добавить комментарий для Kompozitor26 Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *