Сломанный ярлык Android после обновления

Активность Launcher/Main была изменена в манифесте, и после обновления пользователи, использующие пользовательские Launcher ОС (например, dodol Launcher), сообщают, что их ярлыки не работают с сообщением «Приложение не установлено».

Это большая проблема, так как многие просто удаляют приложение в замешательстве.

Насколько я понимаю, происходит то, что программа запуска собирает дополнительную информацию о ярлыке, и когда она видит несоответствие с активностью запуска в манифесте, она думает, что приложения больше нет.

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

Я экспериментирую с установкой как старых, так и новых действий в качестве MAIN/LAUNCHER, чтобы посмотреть, повлияет ли это.

Кто-нибудь еще сталкивался с подобной проблемой, и если да, то какие-либо рекомендуемые стратегии по решению этой проблемы?

Спасибо.


person AlexVPerl    schedule 03.03.2015    source источник
comment
Вы нашли ответ на это?   -  person katit    schedule 14.02.2016
comment
Похоже, что для этого нет решения. Причина в том, что при создании ярлыков некоторые пользовательские программы запуска включают дополнительные метаданные из манифеста. С некоторыми пользовательскими пусковыми установками эта проблема возникает, когда вы меняете стартовую активность.   -  person AlexVPerl    schedule 15.02.2016
comment
Я нашел решение вчера, оно работает в моем тестировании. Возможно, он не будет работать для всех пользовательских лаунчеров, но он работает для пары, которую я тестировал. Смотри мой ответ   -  person katit    schedule 15.02.2016
comment
По моему опыту, решение не было на 100% пуленепробиваемым, когда дело доходит до пользовательских лаунчеров. Я пробовал с несколькими различными пусковыми установками, и Dodol Launcher был самым большим нарушителем, я бы использовал его для тестирования. Но опять же, это не окончательно.   -  person AlexVPerl    schedule 15.02.2016
comment
Ответ @katit действителен, просто хотел поделиться с вами этой статьей Никогда не меняйте активность своей программы запуска. Никогда и сохраняйте свои программы запуска : Используйте псевдонимы действий, которые решают ту же проблему, и все шаги описаны более подробно.   -  person Roman Nazarevych    schedule 17.07.2017


Ответы (1)


Вот как я решил это. У меня было LoginActivity в качестве основного действия по запуску:

<activity android:name=".activities.LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

Нам пришлось переделать часть логики, в основном то, как начинается наша деятельность MAIN. В итоге мы создали фиктивный LauncherActivity и перенесли пользователя либо внутрь приложения, либо в LoginActivity. Итак, после того, как это было сделано, мы получили точно такую ​​​​же проблему после обновления. К счастью, я поймал его перед выпуском. «Приложение не установлено».

Решение. Используйте activity-alias, немного повозился, и я не уверен на 100%, нужно ли нам переименовывать LoginActivity или нет. Но мы переименовали его в SignInActivity и вот конечный конфиг в манифесте, который нам подходит.

<activity android:name=".activities.LauncherActivity" android:noHistory="true" android:theme="@android:style/Theme.NoDisplay" />

        <!-- Don't brake 2.7.2->3.0.0 shortcuts, keep ALIAS for old way to access app -->
        <activity-alias android:name=".activities.LoginActivity" android:targetActivity=".activities.LauncherActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity android:name=".activities.SignInActivity" />

Укажите здесь — мы сохраняем старую подпись и «перенаправляем» пусковые установки для использования нашей новой LauncherActivity

person katit    schedule 14.02.2016