Android: SearchableInfo é nulo ao usar packageNameSuffix no script de construção Gradle
Eu descobri que o métodogetSearchableInfo
sempre retorna nulo duranteSearchView
inicialização se eu usar opackageNameSuffix
no script de construção Gradle do projeto.
Inicialização do SearchView:
final SearchManager searchManager = (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
SearchableInfo info = searchManager.getSearchableInfo(componentName);
mSearchView.setSearchableInfo(info);
Build.gradle do projeto:
android {
[...]
buildTypes {
debug {
packageNameSuffix ".debug"
versionNameSuffix "-debug"
signingConfig signingConfigs.debug
}
[...]
}
}
Se o sufixo do pacote não for usado, o dadocomponentName
éComponentInfo{com.example.android/com.example.android.MapActivity}
e aSearchView
bem como seus associadosSuggestionsProvider
funciona bem.
Mas sepackageNameSuffix
está configurado para".debug"
, o dadocomponentName
éComponentInfo{com.example.android.debug/com.example.android.MapActivity}
e aSearchManager
retornanull
, em vez de retornar o respectivoSearchableInfo
objeto.
Alguém sabe como acertarSearchableInfo
deSearchManager
? Obrigado!
[EDITAR]
Eugen Martinov mencionou nos comentários que esse comportamento poderia ter a ver com renomear autoridades impróprias ou desaparecidas. Mas também configurei uma nomeação dependente do tipo de compilação das autoridades, que omiti na postagem inicial por uma questão de simplicidade.
Build.gradle do projeto:
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 / debug / res / values / build-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 / release / res / values / build-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 / main / 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" />
Instalando a depuração (com opackageNameSuffix
opção) e o apk de lançamento no mesmo dispositivo funciona. Não recebo um erro comoFailure [INSTALL_FAILED_CONFLICTING_PROVIDER]
... Mas como já disse,SearchableInfo
énull
então.
Instalando os dois apk sem opackageNameSuffix
A opção leva ao seguinte erro:Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] - Installation failed since the device already has an application with the same package but a different signature.
Ou estou faltando alguma coisa aqui?
[/EDITAR]