Почему подпись приложения меняется в Android после изменения пути к классам?

У меня есть проект Android, который разветвляется на три разных приложения: app-1, app-2 и app-3, которые применяют некоторые настройки. В настоящее время существует много дублирования кода, что превращает обслуживание в кошмар: внесите изменения в одну из веток, а затем объедините две другие.

Итак, мы создаем проект библиотеки с именем app-core, который исключает большую часть дублированного кода. Все идет нормально.

Когда я запускаю это в эмуляторе, где приложение уже было загружено (до рефакторинга), я получаю это исключение:

Re-installation failed due to different application signatures

Другая подпись? Но я только что добавил строку в .classpath для ссылки на app-core проект Java!

Главный вопрос: не будет ли это беспокоить существующих пользователей?

И побочный вопрос: почему это другая подпись?


person espinchi    schedule 16.03.2010    source источник
comment
Была ли у эмулятора релизная или отладочная сборка?   -  person Josh Lee    schedule 17.03.2010


Ответы (4)


Цифровая подпись управляется ключом подписи, существующим на компьютере, который подписывает приложение. Если разработчик А компилирует приложение с помощью стандартного ключа отладки и устанавливает его в эмулятор, а затем пытается установить какую-либо другую вариацию приложения — одну, подписанную производственным ключом, другую, подписанную ключом отладки разработчика Б и т. д., — в тот же эмулятор, вы получите эту ошибку.

Главный вопрос: не будет ли это беспокоить существующих пользователей?

Есть ли у вас рабочий ключ подписи, который вы использовали для версии приложения, используемой вашими существующими пользователями? Если да, то проблем быть не должно. Если нет, то ты облажался.

person CommonsWare    schedule 16.03.2010
comment
Есть ли способ получить ключ подписи производства? Или действительно, я облажался? - person Pradip Kharbuja; 11.08.2013
comment
@PradipKharbuja: Есть ли способ получить производственный ключ подписи? -- вы создали его перед отправкой приложения. - person CommonsWare; 11.08.2013
comment
Я имею в виду, могу ли я снова получить этот ключ? Потому что я потерял его... :( - person Pradip Kharbuja; 11.08.2013
comment
@PradipKharbuja: Восстановите его из резервной копии, которую вы сделали на своей машине разработки. Если вы не сделаете резервную копию своей машины для разработки, вам не повезло. - person CommonsWare; 12.08.2013
comment
Я сделал два полностью разделенных приложения, хотя второе приложение в значительной степени скопировано из первого приложения ... когда первое приложение установлено, я не могу запустить второе приложение на своем S4? что мне сделать, чтобы запустить оба приложения на одном устройстве? Спасибо - person McLan; 20.05.2014
comment
@Rania-Boy: у них должны быть разные имена пакетов. - person CommonsWare; 20.05.2014
comment
как называется ключ? или какой это тип файла. Это файл .jks? потому что я скопировал его со своего компьютера на свой Mac, но у меня все еще та же проблема. Кроме того, сейчас я использую AndroidStudio, поэтому файловая система немного отличается, но я назвал имя пакета таким же. Ну, я в основном хочу знать, является ли это файлом .jks. - person flobacca; 17.10.2014
comment
@flobacca: как называется ключ? или какой это тип файла. -- ключ подписи отладки находится в файле debug.keystore. В OS X он должен находиться в ~/.android. Производственный ключ подписи также будет хранилищем ключей Java. Назовете ли вы этот файл с расширением .jks или нет, зависит от вас. - person CommonsWare; 17.10.2014
comment
@CommonsWare, спасибо, нашел файл debug.keystore на моем компьютере и заменил файл debug.keystore на моем Mac. Нашел там, где ты сказал, что найду. (не волнуйтесь, файл orig mac не потерян). Но все еще получаю ту же ошибку. Различные подписи приложений. Буду продолжать работать над этим, как уже в google play. Не могу попросить людей удалить и установить это новое приложение. - person flobacca; 17.10.2014
comment
@flobacca: вы не использовали хранилище ключей отладки для распространения своего приложения в Play Store. Вы использовали свое производственное хранилище ключей. Где вы сохранили это хранилище ключей и как вы его назвали, зависело от вас. - person CommonsWare; 17.10.2014
comment
истинный. Я просто говорю, что я перенес хранилище ключей для отладки и производства на свой Mac с помощью androidstudio. Я сослался на прод. хранилище ключей, когда я сделал подписанный apk. Так что я верю прод. хранилище ключей было заменено и указано правильно. Я скопировал хранилище mac debug.keystore с моим pc debug.keystore, однако ссылка на хранилище ключей отладки может быть неверной. Я считаю, что это последнее, что может быть неправильным, но я не знаю, где его найти. Ошибка: Установка не удалась, так как на устройстве уже есть приложение с таким же пакетом, но с другой подписью. - person flobacca; 17.10.2014
comment
Нашел это в руководстве по устранению неполадок Android keystore/key, уже сгенерированном инструментами сборки Android. Поэтому я не менял инструменты сборки, поэтому, вероятно, он ссылается на правильное хранилище debug.keystore, которое находится на моем компьютере. Так что я не знаю, что не так. Поскольку у меня всего 5 пользователей, они просто удалят их, когда появится следующее обновление. Спасибо CommonsWare. - person flobacca; 17.10.2014

Удалите приложение на устройстве, затем снова запустите код, он будет работать. Это случается со мной, и я пробовал то же самое, теперь он работает правильно.

person morvix    schedule 01.08.2011

Для этой проблемы вам нужно проверить, что правильный ключ используется в (Окно-> Настройки-> Android-> сборка). Это можно проверить в файле android.mk приложения. И при размещении правильного ключевого пути CLEAN и BUILD проекта, чтобы избежать этой ошибки.

person beginner    schedule 26.07.2013

У меня была похожая проблема. Если вы устанавливаете его на свое устройство, вам необходимо удалить приложение на своем устройстве, прежде чем устанавливать его из eclipse. Это обязательно решит вашу проблему.

Ваше здоровье

person AndroidNijx    schedule 27.09.2013