Android: SearchableInfo имеет значение null при использовании packageNameSuffix в скрипте сборки Gradle
Я столкнулся с этим методомgetSearchableInfo
всегда возвращает ноль во времяSearchView
инициализация, если я используюpackageNameSuffix
в скрипте сборки Gradle проекта.
Инициализация SearchView:
final SearchManager searchManager = (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
SearchableInfo info = searchManager.getSearchableInfo(componentName);
mSearchView.setSearchableInfo(info);
Build.gradle проекта:
android {
[...]
buildTypes {
debug {
packageNameSuffix ".debug"
versionNameSuffix "-debug"
signingConfig signingConfigs.debug
}
[...]
}
}
Если суффикс пакета не используется, данныйcomponentName
являетсяComponentInfo{com.example.android/com.example.android.MapActivity}
иSearchView
а также связанные с нимSuggestionsProvider
отлично работает
Но еслиpackageNameSuffix
установлен в".debug"
данныйcomponentName
являетсяComponentInfo{com.example.android.debug/com.example.android.MapActivity}
иSearchManager
возвращаетсяnull
вместо возврата соответствующегоSearchableInfo
объект.
Кто-нибудь знает как получить праваSearchableInfo
изSearchManager
? Спасибо!
[РЕДАКТИРОВАТЬ]
В комментариях Евгений Мартинов отметил, что такое поведение может быть связано с неправильным или отсутствующим переименованием властей. Но я также настроил именование полномочий, зависящее от типа сборки, которое для простоты опущено в первоначальном посте.
Build.gradle проекта:
android {
[...]
sourceSets {
debug {
java.srcDirs = [
'src/main/java'
]
java.srcDirs = [
'src/debug/res',
'src/main/res'
]
}
release {
java.srcDirs = [
'src/main/java'
]
java.srcDirs = [
'src/release/res',
'src/main/res'
]
}
[...]
}
}
SRC / отлаживать / RES / значения / строить-config.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="cfg_app_name">App - Debug</string>
<string name="cfg_authorities">com.example.debug.SuggestionsProvider</string>
<string name="cfg_maps_key"><!-- some key --></string>
</resources>
SRC / отпускания / RES / значения / строить-config.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="cfg_app_name">App</string>
<string name="cfg_authorities">com.example.SuggestionsProvider</string>
<string name="cfg_maps_key"><!-- some other key --></string>
</resources>
SRC / главная / RES / XML / searchable.xml:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/action_search_hint"
android:label="@string/cfg_app_name"
android:includeInGlobalSearch="false"
android:queryAfterZeroResults="true"
android:searchSuggestAuthority="@string/cfg_authorities"
android:searchSuggestIntentAction="android.intent.action.VIEW"
android:searchSuggestThreshold="3" />
Установка как отладки (сpackageNameSuffix
вариант) и релиз apk на том же устройстве работает. Я не получаю ошибку какFailure [INSTALL_FAILED_CONFLICTING_PROVIDER]
... но, как уже было сказано,SearchableInfo
являетсяnull
тогда.
Установка обоих apk безpackageNameSuffix
Опция приводит к следующей ошибке:Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] - Installation failed since the device already has an application with the same package but a different signature.
Или я что-то здесь упускаю?
[/РЕДАКТИРОВАТЬ]