Gradle。编译(x.x.x)和打包(y.y.y)的解决版本不同
Gradle. Resolved versions for compilation (x.x.x) and packaging (y.y.y) differ
cordova 中有很多插件,其中很多都使用google播放服务。而且每个插件都想使用一些特殊版本的播放服务。真烦人。
为了解决这个问题,我尝试在 gradle 中创建简单的依赖版本解析器。它应该从一些插件依赖项(我的意思是播放服务版本)中获取所需的版本,并为其他插件依赖项设置相同的版本。
这是我的脚本:
def right_version = "9+";
configurations.all{
resolutionStrategy{
eachDependency { DependencyResolveDetails details ->
if (details.requested.name.contains('play-services') && details.requested.version != '9+') {
right_version = details.requested.version
}
}
eachDependency { DependencyResolveDetails details ->
if ( details.requested.name.contains('play-services') ){
details.useVersion right_version
}
}
}
}
可以正常使用,但有一点小问题。我收到如下错误:
Conflict with dependency 'com.google.android.gms:play-services-ads'. Resolved versions for compilation (10.2.0) and packaging (9.8.0) differ. This can generate runtime errors due to mismatched resources.
这是什么原因?或者您知道解决依赖冲突的更好方法吗?
确保你在 Android 工作室中没有离线,如果你正在使用这个 ide for development.You 可以检查 File>Settings>Build,Execution ,部署>Gradle。
其次,如果您使用命令行工具或 Android 工作室,您必须将 google 播放服务更新到 build.gradle 中的最新版本 应用程序或应用程序 例如
编译'com.google.android.gms:play-services-location:9.2.0'到最新版本
编译'com.google.android.gms:play-services-location:10.2.0'。
您可以从此处的列表中选择特定版本的播放服务 api 而不是完整的 google 播放服务包 [https://developers.google.com/android/guides/setup][1]
终于找到问题的根源了。两次使用 eachDependency 并在第二次使用时更改版本是一个坏主意。看起来,依赖项在第一个 eachDependency 之后被批准(或类似的东西)。因此,使用以下代码一切正常:
def right_version = "9+";
configurations.all{
dependencies.all{ Dependency d ->
def right_version_copy = right_version
if(d.getName().contains("play-services") && d.getVersion() != right_version_copy){
right_version = d.getVersion()
}
}
resolutionStrategy{
eachDependency { DependencyResolveDetails details ->
if ( details.requested.name.contains('play-services') ){
details.useVersion right_version
}
}
}
}
cordova 中有很多插件,其中很多都使用google播放服务。而且每个插件都想使用一些特殊版本的播放服务。真烦人。
为了解决这个问题,我尝试在 gradle 中创建简单的依赖版本解析器。它应该从一些插件依赖项(我的意思是播放服务版本)中获取所需的版本,并为其他插件依赖项设置相同的版本。
这是我的脚本:
def right_version = "9+";
configurations.all{
resolutionStrategy{
eachDependency { DependencyResolveDetails details ->
if (details.requested.name.contains('play-services') && details.requested.version != '9+') {
right_version = details.requested.version
}
}
eachDependency { DependencyResolveDetails details ->
if ( details.requested.name.contains('play-services') ){
details.useVersion right_version
}
}
}
}
可以正常使用,但有一点小问题。我收到如下错误:
Conflict with dependency 'com.google.android.gms:play-services-ads'. Resolved versions for compilation (10.2.0) and packaging (9.8.0) differ. This can generate runtime errors due to mismatched resources.
这是什么原因?或者您知道解决依赖冲突的更好方法吗?
确保你在 Android 工作室中没有离线,如果你正在使用这个 ide for development.You 可以检查 File>Settings>Build,Execution ,部署>Gradle。 其次,如果您使用命令行工具或 Android 工作室,您必须将 google 播放服务更新到 build.gradle 中的最新版本 应用程序或应用程序 例如 编译'com.google.android.gms:play-services-location:9.2.0'到最新版本 编译'com.google.android.gms:play-services-location:10.2.0'。 您可以从此处的列表中选择特定版本的播放服务 api 而不是完整的 google 播放服务包 [https://developers.google.com/android/guides/setup][1]
终于找到问题的根源了。两次使用 eachDependency 并在第二次使用时更改版本是一个坏主意。看起来,依赖项在第一个 eachDependency 之后被批准(或类似的东西)。因此,使用以下代码一切正常:
def right_version = "9+";
configurations.all{
dependencies.all{ Dependency d ->
def right_version_copy = right_version
if(d.getName().contains("play-services") && d.getVersion() != right_version_copy){
right_version = d.getVersion()
}
}
resolutionStrategy{
eachDependency { DependencyResolveDetails details ->
if ( details.requested.name.contains('play-services') ){
details.useVersion right_version
}
}
}
}