我通过选中Android Studio 3中的“ include kotlin”框创建了一个新项目,并且在开箱时编译时出现错误
oc new-app
我确保所有插件都是最新的,并且正确安装了Android SDK。
有人知道如何解决此错误吗?
答案 0 :(得分:79)
kotlin-stdlib-jre[7/8]
不久前已被弃用,此后已被删除。弃用说明保存到1.2.71,这是发布这些工件的最新版本。官方弃用通知可以在here中找到。使用任何不推荐使用的版本(在删除之前)也应该在(至少)Android Studio和IntelliJ中产生警告。
改为使用kotlin-stdlib-jdk7
。它与kotlin-stdlib-jre7
的依赖项相同(较新的依赖项除外),但已重命名为kotlin-stdlib-jdk
。 kotlin-stdlib-jre
现在不再维护为单独的依赖项。
IntelliJ和Android Studio当前都使用kotlin-stdlib-jre7
生成新项目; 这可能是一个错误。他们可能尚未更新项目生成器。因此,您必须手动将依赖项替换为可用的依赖项,直到他们解决此问题。这取决于Kotlin插件。如果没有,请更新它。 我还没有检查是否已打补丁-如果已打补丁,那只能解决创建新项目的问题。对于从旧版本进行更新,其余答案仍然适用
如果您使用的是1.2.71或更低版本,并且要升级到1.3.0或更高版本,那么您自然就必须这样做。
这些是自Kotlin 1.3.0起新的有效依赖项:
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
$kotlinVersion
是包含版本或硬编码版本(即1.3.0
)的变量
或者,您可以使用the "plain" stdlib(kotlin-stdlib
)来代替特定于JDK的版本。但是您必须以任何一种方式更改依赖关系,因此建议您使用kotlin-stdlib-jdk7
,或者如果您打算使用Java 8,则kotlin-stdlib-jdk8
依赖性的最新版本也可以在here中找到。 jdk7,jdk8和特定于版本的stdlib都遵循相同的版本(根据此编辑-将来可能会更改,但是在更改发生之前可能会出现通知),因此是否检查jdk8,jdk7或通常,所有版本都应该在stdlib工件之间通用。
相同的实际解决方案也适用于其他构建系统,但是代码不同。由于构建系统很多,因此我将不包括所有构建系统,但是重点是将工件从kotlin-stdlib-jre[num]
更改为kotlin-stdlib-jdk[num]
(当然没有括号)。或者,如前所述,kotlin-stdlib
。
与构建系统无关,它基于对Maven Central和类似存储库的访问。如果您的构建系统不支持它,并且/或者破坏了Maven样式的约定和存储库,那么您将必须找到适用于您的构建系统的东西。
改为使用org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version
或org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version
(取决于您最初使用的版本)。
答案 1 :(得分:10)
从build.gradle中删除此行:
if (v1.x==-v2.x&&v1.y==-v2.y) return Math.PI
在build.gradle中添加此行:
function angle(origin, p1, p2, sign=false){
if (p1.x==p2.x && p1.y==p2.y) return 0
if (p1.x==-p2.x && p1.y==-p2.y) return Math.PI
const a = {x: p1.x-origin.x, y: p1.y-origin.y}
const b = {x: p2.x-origin.x, y: p2.y-origin.y}
sign = sign && a.x*b.y < a.y*b.x ? -1 : 1
return sign * Math.acos(
(a.x*b.x+a.y*b.y)/(Math.sqrt(a.x**2+a.y**2)*Math.sqrt(b.x**2+b.y**2))
)
}
在项目级别更新build.gradle版本: kotlin version ='1.3.0'
答案 2 :(得分:0)
在一般情况下,请在以下位置检查可用的工件
https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jdk7 https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jre7 https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jdk8 https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jre8
答案 3 :(得分:-1)
在 build.gradle ( Module:app )中替换
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
与
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
并在 build.gradle ( Module:project )中将版本更改为
ext.kotlin_version = '1.3.0'