Обновите приложение на корневом устройстве и запустите его вручную

#java #android #android-studio #apk #root

#Ява #Android #android-студия #апк #корень

Вопрос:

Я пишу приложение в kotlin и java и только на корневых TV-Box эс. Я добавил функцию загрузки apk-файла с моего собственного сервера, его установки и повторного запуска после установки:

   Log.d(TAG, "doInBackground: writeByte install");  cs.writeBytes(String.format("cat %s | pm install -S %dn", strings[0], length));  Log.d(TAG, "doInBackground: writeByte start activity");  cs.writeBytes(("am start -n com.exam.ple.views/com.exam.ple.views.SplashActivity"    " --ez update truen"));  

Проблема в том, что этот код отлично работает, если подписанный apk-файл находится в режиме отладки. Но когда он находится в режиме выпуска, он работает неправильно, что означает, что приложение успешно устанавливается, но не запускает действие (и только тогда, когда оно подписано как APK-файл выпуска). Я проверил am start ... терминал ( Termux ), и он отлично работает при любых обстоятельствах.

Есть идеи, что может вызвать эту проблему?

Комментарии:

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

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

3. Вполне возможно, что proguard изменит название com.exam.ple.views/com.exam.ple.views.SplashActivity . вы могли бы попробовать что-то вроде SplashActivity.class.getCanonicalName() вместо com.exam.ple.views.SplashActivity .

4. Как мы можем быть уверены, произойдет это или нет?

5. Вы можете настроить поведение proguard ( proguard-rules.pro ) , да