这是一个关键问题。
嗨,由于相同的 firebase 更新,我还有其他错误。 当我输入:
cordova build android
在控制台中,我得到以下输出:
构建失败
总时间:4.529 秒
FAILURE:构建失败,出现异常。
我一直在通过网络寻找答案,但我找到的解决方案(解决方案 1 、解决方案 2 、解决方案 3 )对我不起作用。
该错误似乎是由于Play Services 更新造成的。 在删除此插件之前,我无法构建我的 android 应用程序。
我希望这个关键问题可以解决重新安装插件。
对此有一个临时修复,将服务和 Firebase 版本强制为 11.8.0。
如何:
把这个放在里面
<hook src="fixFirebasePlugin.js" type="before_build" />
在您的项目根目录上创建 JS 文件:
module.exports = function(context) {
var fs = require('fs');
var path = require('path');
var rootdir = context.opts.projectRoot;
var platformDir = 'platforms/android';
//change the path to your external gradle file
var srcFile = path.join(rootdir, 'src/android/build-extras.gradle');
var destFile = path.join(rootdir, platformDir, 'build-extras.gradle');
console.log("copying "+srcFile+" to "+destFile);
fs.createReadStream(srcFile).pipe(fs.createWriteStream(destFile));
}
在 src 文件夹中创建一个 android fodler 并在其中创建一个名为 build-extras.gradle 的文件,内容如下:
configurations.all {
resolutionStrategy {
force "com.google.android.gms:play-services-ads:11.8.0"
force "com.google.android.gms:play-services-base:11.8.0"
force "com.google.android.gms:play-services-gcm:11.8.0"
force "com.google.android.gms:play-services-analytics:11.8.0"
force "com.google.android.gms:play-services-location:11.8.0"
force "com.google.android.gms:play-services-basement:11.8.0"
force "com.google.android.gms:play-services-tagmanager:11.8.0"
force 'com.google.firebase:firebase-core:11.8.0'
force 'com.google.firebase:firebase-crash:11.8.0'
force 'com.google.firebase:firebase-auth:11.8.0'
force 'com.google.firebase:firebase-common:11.8.0'
force 'com.google.firebase:firebase-config:11.8.0'
force 'com.google.firebase:firebase-messaging:11.8.0'
}
}
删除并重新添加平台(在 6.3.0 上测试),执行cordova build android,并且已修复。
之后,运行/构建 --prod,无论你想要什么。
@tryadelion ,我已经完全按照你提到的方式尝试了你的解决方案,但我在控制台中遇到了同样的错误:(
您是否删除了平台,读取为[email protected]并执行了“~:cordova build android”,没有 prod,没有 run,没有 ionic? 这就是我的诀窍!
是的,我做了所有事情(config.xml、fixFirebasePlugin.js、build-extras.gradle、平台 [email protected]),但是我执行的每个运行或构建命令都会产生相同的输出:
我的项目不是离子项目,我不知道这对这个问题是否重要。
您是否尝试过任何先前的“修补程序”? 喜欢手动更改插件 XML 上的版本? 我不得不删除并阅读它,因为我弄乱了它的文件。 到目前为止,它已经在 3 个不同的项目上工作,虽然都是离子,但钩子系统与它的cordova 驱动相同。
在此之前,我只更改了 /platforms/android/project.properties 和 /platforms/android/build.gradle,但之后我删除并重新添加了插件(第一个)和平台[email protected]。 (后)。
我不知道失败的原因是什么,但我认为我的项目仍然有两个版本:12.0 和 11.8.0 因为在控制台中我看到了这个:
我不知道在哪里可以指定 12.0.0 版本。
删除节点模块,删除平台/android,删除 /plugins 中的每个服务使用插件,NPM i,阅读您删除的每个插件,添加平台 android,然后重试。 这就是我会做的。
好的,我会尝试重新安装我拥有的每个组件。 非常感谢您的帮助!!
@tryadelion感谢分享。 我正要分叉 cordova-plugin-firebase 和 force 版本。 无论如何,我实施了您的解决方案。
我们正在使用同样有效的
最后我通过这种方式解决了修改文件 /platforms/android/build.gradle 的问题:
allprojects {
repositories {
// Temp fix for com.google.android.gms.license
// Added from here
configurations.all {
resolutionStrategy {
// Put your gms packages here with 11.8.0 attached
force "com.google.android.gms:play-services-analytics:11.8.0"
force "com.google.android.gms:play-services-auth:11.8.0"
force "com.google.android.gms:play-services-gcm:11.8.0"
force "com.google.android.gms:play-services-location:11.8.0"
}
}
// until here
jcenter()
maven {
url "https://maven.google.com"
}
}
}
(解决方案来自 https://github.com/facebook/react-native/issues/18479)
再次感谢!
对于Ionic v1.1.0
和cordova-plugin-firebase v0.1.25
这个钩子解决了我的问题:
//before_build/010_add_gradle_extras.js
#!/usr/bin/env node
var fs = require('fs');
var path = require('path');
var rootdir = process.argv[2];
var platformDir = 'platforms/android';
var srcfile = path.join(rootdir, 'build-extras.gradle');
var destfile = path.join(rootdir, platformDir, 'build-extras.gradle');
var destdir = path.dirname(destfile);
if (fs.existsSync(srcfile) && fs.existsSync(destdir)) {
fs.createReadStream(srcfile).pipe(fs.createWriteStream(destfile));
process.stdout.write('Hook: build-extras.gradle added');
}
//build-extras.gradle
configurations.all {
resolutionStrategy {
force "com.google.android.gms:play-services-ads:11.8.0"
force "com.google.android.gms:play-services-base:11.8.0"
force "com.google.android.gms:play-services-gcm:11.8.0"
force "com.google.android.gms:play-services-analytics:11.8.0"
force "com.google.android.gms:play-services-location:11.8.0"
force "com.google.android.gms:play-services-basement:11.8.0"
force "com.google.android.gms:play-services-tagmanager:11.8.0"
force 'com.google.firebase:firebase-core:11.8.0'
force 'com.google.firebase:firebase-crash:11.8.0'
force 'com.google.firebase:firebase-auth:11.8.0'
force 'com.google.firebase:firebase-common:11.8.0'
force 'com.google.firebase:firebase-config:11.8.0'
force 'com.google.firebase:firebase-messaging:11.8.0'
}
}
删除和添加新的 android 平台也是一个关键因素。
@tryadelion ,知道为什么我在尝试您的方法时会收到此错误吗?
A problem occurred configuring root project 'android'.
> Could not resolve all dependencies for configuration ':_debugApkCopy'.
> Could not find com.google.gms:google-services:11.8.0.
Required by:
project :
我做了 jotefer 所说的,它使构建工作。 但是,远程配置停止工作。 任何的想法?
深入研究 fetch 不起作用的问题,我发现这是因为调用 fetch 时抛出以下异常:
引起:java.lang.ClassNotFoundException:在路径上找不到类“android.support.v4.util.ArraySet”:DexPathList
任何的想法?
@remisture当另一个 gradle 文件仍在引用 12.X 时,我遇到了这个问题,请尝试构建清理。
我通过更新platforms/android/build.gradle
前
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
}
}
后:
allprojects {
repositories {
//start here
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.google.android.gms') {
details.useVersion '11.8.0'
}
if (requested.group == 'com.google.firebase') {
details.useVersion '11.8.0'
}
}
}
//end
jcenter()
maven {
url "https://maven.google.com"
}
}
}
下面是我的整个 build.gradle。 最后还有一个有用的部分,用于更改所有项目的编译 sdk
buildscript {
repositories {
jcenter()
google()
mavenLocal()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.google.android.gms') {
details.useVersion '12.0.1'
}
}
}
mavenLocal()
jcenter()
maven {
url "https://jitpack.io"
}
maven {
url 'https://maven.google.com'
}
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
}
subprojects {
afterEvaluate {project ->
if (project.hasProperty("android")) {
android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
}
}
}
}
@soumak77有效,谢谢
最有用的评论
我通过更新
platforms/android/build.gradle
前
后:
在[email protected] 上测试