Изменилась ли интерпретация android:label в Android Nougat (7)?

Я добавил applicationIdSuffix для каждого типа сборки в gradle, чтобы иметь возможность одновременно устанавливать все типы сборки на одном устройстве. У меня также есть разные строковые ресурсы для каждого типа сборки, что означает, что у меня может быть строковый ресурс, "app_name" уникальный для каждого типа сборки (например, Мое приложение, Мое приложение (бета), Мое приложение (отладка)). Я использую элемент android:label="app_name" на элементе <application> в элементе AndroidManifest.xml, android:label="app_title" на элементе <activity> и android:label="app_name" на элементе <intent-filter>, что дало мне идеальную настройку: в лаунчере каждый тип сборки получил свое уникальное имя лаунчера, но заголовок на панели инструментов был одинаковым (уникального ресурса нет). для app_title).

Но запуск одного и того же приложения с несколькими типами сборки на телефонах Android Nougat (и эмуляторах) дает med одинаковые имена средств запуска. Я могу установить его одновременно, но название средства запуска приложений такое же... Есть идеи, как решить эту проблему на устройствах Nougat? Работает на Marshmallow и ниже.

Обновление 1: не удается заставить его работать. Позвольте мне поделиться кодом:

<application
        ...
        android:label="@string/launcher_name">
        <a... android:name=".MainActivity"
            android:label="@string/app_name">
            <i...
                android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </i...>
        </a...>
</app...>

/debug/res/values/strings.xml содержит launcher_name="My app -D" Но при запуске в AS на emu ярлыком запуска является My app.

Обновление 2: зарегистрирована ошибка на сайте Android.com. http://code.google.com/p/android/issues/detail?id=223706

BR, J


person jpgw    schedule 22.09.2016    source источник
comment
Как вы определяете ресурсы String? Используете ли вы выражение Gradle для добавления ресурса в каждый тип сборки или у вас есть один строковый файл ресурсов в исходной папке каждого типа сборки?   -  person Erik Hellman    schedule 22.09.2016
comment
@ErikHellman У меня есть один строковый ресурс в каждой папке res типа сборки. Но я попытался установить строку res для каждого типа сборки в build.gradle, но это ничего не изменило... Должно ли?   -  person jpgw    schedule 22.09.2016
comment
Да, кажется странным. Единственное, что здесь изменилось, это то, что Android 7.0 имеет более продвинутую поддержку локализации. По сути, если бы у вас было где-то имя по умолчанию и локализованная версия, и вы ожидали бы, что локализованная версия будет загружена, тогда все могло бы быть по-другому. Все ли строковые файлы в различных типах сборки помещены в папку значений по умолчанию (например, src/debug/res/values/strings.xml, src/release/res/values/strings.xml и т. д.)?   -  person Erik Hellman    schedule 22.09.2016
comment
Да, это: beta/res/values/string.xml, debug/res/values/strings.xml, main/res/values/strings.xml... А в сборке/intermediates/res/merged/beta/ values/values.xml, например, app_name — это имя моего бета-приложения, что правильно... Я заметил, как изменились имена некоторых других установленных приложений для запуска приложений после обновления до Nougat, так что, вероятно, это не моя настройка, которая неверна. .. @ЭрикХеллман   -  person jpgw    schedule 23.09.2016


Ответы (1)


Хорошо, я только что проверил это сам и не могу воспроизвести проблему. Мой совет: проверьте, как размещены ваши строки ресурсов. Если вы хотите, чтобы имя приложения отличалось для каждого типа сборки, убедитесь, что этот ресурс размещен в каждой отдельной сборке, а не в папке main/res/.

Я создал labels.xml, в который добавил <string name="app_name">My App (X)</string>, где X — release, debug или beta в зависимости от типа сборки. Это работает на всех версиях Android, которые мне удалось протестировать.

Просто убедитесь, что у вас нет строкового ресурса в основной папке. Хотя это должно привести к ошибке сборки из-за дублирования ресурсов.

person Erik Hellman    schedule 24.09.2016
comment
Не могу заставить его работать. Позвольте мне поделиться кодом: ‹app... ... android:label=@string/launcher_name› ‹a... android:name=.MainActivity android:label=@string/app_name› ‹i... android: label=@string/launcher_name› ‹action android:name=android.intent.action.MAIN/› ‹category android:name=android.intent.category.LAUNCHER/› ‹/i...› ‹/a... › ‹/app...› /debug/res/values/strings.xml содержит launcher_name=My app -D Но при запуске в AS на emu ярлыком запуска является My app. - person jpgw; 25.09.2016
comment
Попробуйте и посмотрите, сможете ли вы воспроизвести его в новом чистом проекте, и опубликуйте сообщение об ошибке на b.android.com (разместите ссылку на проблему здесь, и я тоже могу следить за ней). - person Erik Hellman; 26.09.2016
comment
Я воспроизвел в чистом проекте с тем же результатом. Сообщил об ошибке на Android.com. code.google.com/p/android/issues/detail?id= 223706 Спасибо за ваши усилия, Эрик! - person jpgw; 26.09.2016