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Ć]