升级到Android Studio 3.0后无法运行Ionic应用程序

27

这是我的Ionic信息

CLI包:(/Users/billb/dev/customer-mkt-app/node_modules)

@ionic/cli-utils  : 1.15.2
ionic (Ionic CLI) : 3.15.2

全局包:

cordova (Cordova CLI) : 7.0.1

本地包:

@ionic/app-scripts : 3.0.1
Cordova Platforms  : android 6.2.3 ios 4.4.0
Ionic Framework    : ionic-angular 3.3.0

系统:

Android SDK Tools : 26.1.1
ios-deploy        : 1.9.2
Node              : v6.11.5
npm               : 3.10.10
OS                : macOS Sierra
Xcode             : Xcode 9.0.1 Build version 9A1004

环境变量:

ANDROID_HOME : /Users/billb/Library/Android/sdk

杂项:

backend : pro

我可以成功构建应用程序。当我尝试在Android Studio中打开它时,我会遇到一些错误,主要是gradle同步失败。以下是消息控制台中的5个错误。
无法解析依赖项“:@debug / compileClasspath”:无法解析项目:CordovaLib。 无法解析项目:CordovaLib。
所需的: 项目:

项目声明了从配置“debugCompile”到配置“debug”的依赖关系,该依赖关系未在项目“:CordovaLib”的描述符中声明。
无法解决':@debugAndroidTest/compileClasspath'的依赖关系:无法解决项目:CordovaLib。 无法解决项目:CordovaLib。
所需内容: 项目:

项目:在配置'debugCompile'到配置'debug'的依赖关系中声明了一个未在项目'>:CordovaLib'的描述符中声明的依赖关系。
无法解决“:@debugUnitTest / compileClasspath”的依赖关系:无法解决项目:CordovaLib的依赖关系。 项目:需要从配置“debugCompile”到配置“debug”的依赖项,但在项目:CordovaLib的描述符中未声明。
无法解决依赖项“:@release / compileClasspath”的问题:无法解决项目:CordovaLib。 无法解决项目:CordovaLib。 要求: 项目: 项目:声明从配置'releaseCompile'到配置'release'的依赖关系,但在项目:CordovaLib的描述符中未声明。
无法解析依赖项“:@releaseUnitTest / compileClasspath”:无法解析项目:CordovaLib。 无法解析项目:CordovaLib。 所需的: 项目:

从配置'releaseCompile'到配置'release'的依赖关系在项目:CordovaLib的描述符中未声明,但项目:声明了此依赖项。

我真的不知道这是什么意思,谷歌也没有提供任何真正有用的信息。我需要在这里做什么?
注意:在发布此帖子后发现了这一点。 在这里传达,以防对其他人有所帮助。 不要升级到Android Studio 3

Android Gradle插件3存在一些回归问题,因此建议使用Android Studio 3,但不要升级Cordova项目中的Gradle插件。 - Greg Dan
我已经更新了所有内容。我吸取教训了。在更新任何内容之前,请检查所有来源。 - Bill
9个回答

109

我已在build.gradle文件中注释了下面的代码行:

//debugCompile project(path: 'CordovaLib', configuration: 'debug') 

//releaseCompile project(path: 'CordovaLib', configuration: 'release')

并且添加了:

compile project(':CordovaLib')

这对我起作用了。


这里加一。谢谢! - ala_747
对我有用!! - jegadeesh
也对我有用。 - Vinayak B
当我再次运行ionic cordova run android时,我的gradle.build被覆盖了。这对我没用... - Wrong
如果你收到警告信息“WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'”,那么只需将“compile”替换为“implementation”。 - metamagikum

18
如果你正在使用Cordova,build.gradle会自动生成。当你下一次构建项目时,上面已接受的回答中的更改将被覆盖为旧的不起作用的内容。 因此,请编辑 platforms/android/cordova/lib/builder/GradleBuiler.js,注释掉第136-139行并添加下一行。
/*depsList += '    debugCompile(project(path: "' + libName + '", configuration: "debug"))';
insertExclude(p);
depsList += '    releaseCompile(project(path: "' + libName + '", configuration: "release"))';
insertExclude(p);
    */
    depsList += "    compile project(':CordovaLib')";
    insertExclude(p);

1
这对我来说是获胜的解决方案,它允许持续构建而不会覆盖build.gradle文件。 - Peter P.
这正是我所需要的,因为GradleBuilder.js覆盖了其他答案中提到的更改。 - Gvstrmrgh

11

如果您在Android Studio 3.0.1中遇到此类错误:

Unable to resolve dependency for :@debug/compileClasspath’: Could not resolve project :CordovaLib.

打开build.gradle文件->找到dependencies并按如下更改

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    // SUB-PROJECT DEPENDENCIES START
    //debugCompile(project(path: "CordovaLib", configuration: "debug"))
    //releaseCompile(project(path: "CordovaLib", configuration: "release"))
    compile project(':CordovaLib')
    // SUB-PROJECT DEPENDENCIES END
}

10

这是一个已知的问题,你可以在 这里 找到相关的jira问题,而根本问题则在 这里,两者都处于“进行中”状态。并且已经有一个Github上的拉取请求,你可以尝试一下,但我不能保证它已经是工作版本。如果你想尝试安装它,请按照以下方式操作:

cordova platform add https://github.com/infil00p/cordova-android.git#StudioThreeFix

4
请在Android的build.gradle依赖项中添加此内容。就这些。
compile project(':CordovaLib')

例如:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    // SUB-PROJECT DEPENDENCIES START
    //debugCompile(project(path: "CordovaLib", configuration: "debug"))
    //releaseCompile(project(path: "CordovaLib", configuration: "release"))
    compile project(':CordovaLib')
    compile "com.android.support:support-v4:24.1.1+"
    compile "com.google.android.gms:play-services-analytics:+"
    // SUB-PROJECT DEPENDENCIES END
}

2

所以,我花了两天时间与这个问题作斗争,并想出了一个半手动的解决方案。

由于Gradle决定在没有任何迁移宽限期的情况下改变其依赖格式,我们被迫做出这样的事情。

(以下是Linux系统的指令。对于Windows系统,您需要使用一些7zip或类似的工具进行最后一步操作)

从您的用户主目录进入.cordova/lib/npm_cache/cordova-android
在那里,应该有一个或多个带有版本号的文件夹。
通常只运行最新版本。
打开它。
删除package目录,但不要删除package.tgz文件。
解压缩package.tgz文件,然后将其删除或移动到备份位置。(有一些额外生成的文件,我们不想重新打包)
编辑文件package/bin/templates/cordova/lib/plugin-build.gradle,并在dependencies内删除这些行。

debugCompile project(path: ":CordovaLib", configuration: "debug")
releaseCompile project(path: ":CordovaLib", configuration: "release")

将它们替换为

implementation project(path: ":CordovaLib")

将软件包目录归档。在Linux中,使用的简短命令是tar czf package.tgz package。在Windows中,您需要使用7zip创建一个.tar.gz归档,并将其重命名为.tgz

之后,在干净的存储库中运行cordova prepare,就可以再次正常工作,除非某些插件明确使用旧的声明格式并需要更新(例如)。


1
我不太明白的是为什么cordova-android本身没有解决这个问题?肯定有其他人也遇到了这个问题吧? - eAi

2

好的,我找到了一个解决方案。

我之前使用的是cordova-android: 6.3.0版本。我将其升级到了7.1.0版本,并修改了config.xml文件中的这一行代码:

之前的代码如下:

<preference name="android-minSdkVersion" value="16" />

现在我正在使用:

<preference name="android-minSdkVersion" value="19" />

这样,ionic cordova run android 再次正常工作,无需更改 build.gradle 中的那些行!

对我有用。按照这些步骤来节省你的时间。谢谢。 - Prithivi Raj

0
当你面对这种问题时,只需将Gradle版本降级到2.2.3并重新同步项目即可解决。

0

配置项 'compile' 已经被弃用,使用 'implementation' 代替。 它将在 2018 年底删除。

只需将 'compile' 替换为 'implementation'

dependencies {
    // SUB-PROJECT DEPENDENCIES START
    //debugCompile(project(path: "CordovaLib", configuration: "debug"))
    //releaseCompile(project(path: "CordovaLib", configuration: "release"))
    implementation project(':CordovaLib')
    // SUB-PROJECT DEPENDENCIES END
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接