Android: SearchableInfo ma wartość null podczas używania pakietu nazwa_pakietu w skrypcie kompilacji Gradle

Spotkałem się z tą metodągetSearchableInfo zawsze zwraca wartość null podczasSearchView inicjalizacja, jeśli używampackageNameSuffix w skrypcie kompilacji projektu Gradle.

Inicjalizacja SearchView:

final SearchManager searchManager = (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
SearchableInfo info = searchManager.getSearchableInfo(componentName);
mSearchView.setSearchableInfo(info);

Kompilacja projektu.gradle:

android {
    [...]
    buildTypes {
        debug {
            packageNameSuffix ".debug"
            versionNameSuffix "-debug"
            signingConfig signingConfigs.debug
        }
        [...]
    }
}

Jeśli przyrostek pakietu nie jest używany, podanycomponentName jestComponentInfo{com.example.android/com.example.android.MapActivity} iSearchView jak również jego związaneSuggestionsProvider dobrze pracować.

Ale jeślipackageNameSuffix jest ustawione na".debug", danycomponentName jestComponentInfo{com.example.android.debug/com.example.android.MapActivity} iSearchManager zwracanull, zamiast zwracać odpowiednieSearchableInfo obiekt.

Czy ktoś wie, jak uzyskać prawoSearchableInfo zSearchManager? Dzięki!

[EDYTOWAĆ]

Eugen Martinov wspomniał w komentarzach, że takie zachowanie może być związane z niewłaściwą lub brakującą zmianą nazwy władz. Skonfigurowałem także nazewnictwo zależne od typu budowy, które zostało pominięte w początkowym poście dla uproszczenia.

Kompilacja projektu.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 / 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" />

Instalowanie zarówno debugowania (za pomocąpackageNameSuffix opcja) i działa apk wydania na tym samym urządzeniu. Nie dostaję błęduFailure [INSTALL_FAILED_CONFLICTING_PROVIDER]... Ale jak już powiedziałem,SearchableInfo jestnull następnie.

Instalacja obu apk zpackageNameSuffix opcja prowadzi do następującego błędu:Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] - Installation failed since the device already has an application with the same package but a different signature.

Czy czegoś tu brakuje?

[/EDYTOWAĆ]

questionAnswers(1)

yourAnswerToTheQuestion