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]

questionAnswers(1)

yourAnswerToTheQuestion