我遇到了这个方法getSearchableInfo
期间始终返回 nullSearchView
初始化如果我使用packageNameSuffix
在项目的 Gradle 构建脚本中。
搜索视图初始化:
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
is ComponentInfo{com.example.android/com.example.android.MapActivity}
和SearchView
以及与其相关的SuggestionsProvider
工作正常。
But if packageNameSuffix
被设定为".debug"
,给定的componentName
is ComponentInfo{com.example.android.debug/com.example.android.MapActivity}
和SearchManager
回报null
,而不是返回各自的SearchableInfo
object.
有谁知道如何获得正确的SearchableInfo
来自SearchManager
?谢谢!
[EDIT]
尤金·马丁诺夫在评论中提到,这种行为可能与当局重命名不当或缺失有关。但我还配置了依赖于构建类型的权限命名,为了简单起见,我在最初的帖子中省略了该命名。
项目的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/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" />
安装调试程序(使用packageNameSuffix
选项)并且同一设备上的发布 apk 可以工作。我没有收到类似的错误Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]
...但正如已经说过的,SearchableInfo
is null
then.
安装两个 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.
或者我在这里错过了什么?
[/EDIT]