Jos*_*e A 5 android gradle kotlin react-native expo
说我花了大约 32 个小时还算轻描淡写。我一直在尝试在由 Expo SDK 44 提供支持的 React Native 项目中启用 Kotlin。
\n我一直在尝试在互联网上找到的所有方法,但总是在 EAS 的 Gradle 阶段出现错误(使用 运行它eas build --profile development --platform android)。
这是我的配置:
\n为了简洁起见,我省略了代码。如果您需要更多背景信息,请告诉我
\n应用程序\\android\\build.gradle:
\nbuildscript {\n ext {\n buildToolsVersion = "30.0.2"\n minSdkVersion = 21\n compileSdkVersion = 31\n targetSdkVersion = 31\n kotlinVersion = "1.4.11"\n }\n repositories {\n google()\n mavenCentral()\n jcenter()\n }\n dependencies {\n classpath("com.android.tools.build:gradle:4.1.0")\n classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")\n \n // NOTE: Do not place your application dependencies here; they belong\n // in the individual module build.gradle files\n }\n}\nRun Code Online (Sandbox Code Playgroud)\napply plugin: "kotlin-android"\napply plugin: "kotlin-android-extensions"\n\ndependencies {\n implementation fileTree(dir: "libs", include: ["*.jar"])\n //noinspection GradleDynamicVersion\n implementation "com.facebook.react:react-native:+" // From node_modules\n implementation project(\':react-native-plaid-link-sdk\')\n\n implementation \'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3\'\n implementation \'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3\'\n implementation \'androidx.core:core-ktx:1.1.0\'\n implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"\n\n// Other comed omitted\n}\n\nRun Code Online (Sandbox Code Playgroud)\n这是我的 package.json
\nbuildscript {\n ext {\n buildToolsVersion = "30.0.2"\n minSdkVersion = 21\n compileSdkVersion = 31\n targetSdkVersion = 31\n kotlinVersion = "1.4.11"\n }\n repositories {\n google()\n mavenCentral()\n jcenter()\n }\n dependencies {\n classpath("com.android.tools.build:gradle:4.1.0")\n classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")\n \n // NOTE: Do not place your application dependencies here; they belong\n // in the individual module build.gradle files\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n这是我的文件夹结构:
\n\n这里的MyAppPackage.kt(android\\app\\src\\main\\java\\com\\pana\\MyAppPackage.kt)
package com.pana // replace your-app-name with your app\xe2\x80\x99s name\n\nimport android.view.View\nimport com.facebook.react.ReactPackage\nimport com.facebook.react.bridge.NativeModule\nimport com.facebook.react.bridge.ReactApplicationContext\nimport com.facebook.react.uimanager.ReactShadowNode\nimport com.facebook.react.uimanager.ViewManager\n\nclass MyAppPackage : ReactPackage {\n\n override fun createViewManagers(\n reactContext: ReactApplicationContext\n ): MutableList<ViewManager<View, ReactShadowNode<*>>> = mutableListOf()\n\n override fun createNativeModules(\n reactContext: ReactApplicationContext\n ): MutableList<NativeModule> = listOf(CalendarModule(reactContext)).toMutableList()\n\n\n}\nRun Code Online (Sandbox Code Playgroud)\n以下是我研究过的一些 SO 资源:
\n以下是我研究过的一些其他资源:
\n以下是我尝试过的一些错误和修复:
\n我已经尝试最小化地增加我当前的项目(请注意,我必须将Intercom 包的compileSdkVersion和设置targetSdkVersion为 31,并且构建成功)。我已关注此视频、官方React Native 文档,以及使用 Android Studio将 Kotlin 添加到现有应用程序(手动方法)。
A。(android/build.gradle)添加(在 buildscript.ext 内)kotlin_version = \'1.4.10\'\nb。(android/build.gradle)添加(内部依赖项)classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"\nc。(android/app/build.gradle) 添加(在文件顶部)apply plugin: "kotlin-android"
尝试编译:
\n[stderr] Note: Recompile with -Xlint:deprecation for details.\n> Task :app:compileDebugKotlin FAILED w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:\n /home/expo/.gradle/caches/transforms-3/f47aaec93b5ce8275ab670559bc858c7/transformed/jetified-kotlin-stdlib-jdk8-1.5.31.jar (version 1.5)\n /home/expo/.gradle/caches/transforms-3/e30ac7ea6364b484c3bc3c923afeabd2/transformed/jetified-kotlin-stdlib-jdk7-1.5.31.jar (version 1.5)\n /home/expo/.gradle/caches/transforms-3/d9723caca13068e43e601371da49b5b2/transformed/jetified-kotlin-stdlib-1.6.10.jar (version 1.6)\n /home/expo/.gradle/caches/transforms-3/c5966235c8aa66a583bf2afcd9edd1b7/transformed/jetified-kotlin-stdlib-common-1.6.10.jar (version 1.6) w: Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath [stderr] e: /home/expo/.gradle/caches/transforms-3/c5966235c8aa66a583bf2afcd9edd1b7/transformed/jetified-kotlin-stdlib-common-1.6.10.jar!/META-INF/kotlin-stdlib-common.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.6.0, expected version is 1.4.0.\nRun Code Online (Sandbox Code Playgroud)\n看到这一点,我进行了一些研究,并建议将 Kotlin 版本推送到 1.6.10:
\nTask :expo-dev-launcher:compileDebugKotlin\n[stderr] Compilation with Kotlin compile daemon was not successful\n[stderr] java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: \n[stderr] java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: \n[stderr] java.io.InvalidClassException: org.jetbrains.kotlin.incremental.IncrementalModuleInfo; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 0\n[stderr] at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:391)\n[stderr] at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)\n[stderr] at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)\n[stderr] at java.base/java.security.AccessController.doPrivileged(Native Method)\n[stderr] at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)\n[stderr] at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)\n[stderr] at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)\n[stderr] at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)\n[stderr] at java.base/java.security.AccessController.doPrivileged(Native Method)\n[stderr] at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)\n[stderr] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n[stderr] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n[stderr] at java.base/java.lang.Thread.run(Thread.java:829)\n[stderr] at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:303)\n[stderr] at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:279)\n[stderr] at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:164)\nRun Code Online (Sandbox Code Playgroud)\n这导致我更新并运行expo upgrade并expo doctor查看是否有任何更新有效。这打开了潘多拉魔盒。升级到 expo SDK 45 也有其自身的问题(显然我有一些冲突的软件包引发以下错误):
[stderr] Note: /home/expo/workingdir/build/app/node_modules/@sentry/react-native/android/src/main/java/io/sentry/react/RNSentryModule.java uses or overrides a deprecated API.\n[stderr] Note: Recompile with -Xlint:deprecation for details.\n> Task :app:compileDebugJavaWithJavac FAILED\n[stderr] /home/expo/workingdir/build/app/android/app/src/main/java/app/pana/MainApplication.java:6: error: package android.app does not exist\n[stderr] import android.app.Application;\n[stderr] ^\n[stderr] /home/expo/workingdir/build/app/android/app/src/main/java/app/pana/MainApplication.java:7: error: package android.content does not exist\n[stderr] import android.content.Context;\n[stderr] ^\n[stderr] /home/expo/workingdir/build/app/android/app/src/main/java/app/pana/MainApplication.java:8: error: package android.content.res does not exist\n[stderr] import android.content.res.Configuration;\n[stderr] ^\n[stderr] /home/expo/workingdir/build/app/android/app/src/main/java/app/pana/MainApplication.java:10: error: package android.webkit does not exist\n[stderr] import android.webkit.WebView;\nRun Code Online (Sandbox Code Playgroud)\n还有其他构建失败了expo-dev-client。我还知道 SDK 45 中的一个错误,即启用 Hermes 时会出现问题。我们正在使用 JSC。
为了防止这个问题变得更长,我尝试过以下其他操作:
\nA。distributionUrl将中的更改gradle-wrapper.properties为更新的 gradle 版本。
b. 使用相应的 kotlin 版本更新并计算(org.jetbrains.kotlin:kotlin-gradle-plugin在 android/build.gradle 中)org.jetbrains.kotlin:kotlin-stdlib-jdk7(将其更改为 jdk8,什么都没有) 。org.jetbrains.kotlinx:kotlinx-coroutines-coreorg.jetbrains.kotlinx:kotlinx-coroutines-androidandroidx.core:core-ktx
C。在声明中添加了这些实现debugImplementation。
d. 研究了Kotlin对应的React Native版本(不知道Expo的SDK 44 0.64版本是否支持Kotlin 1.6.10)。
\ne. 使用 Android Studio 检查语法错误。
\nF。跑得干净利落。
\nG。和其他东西...
\n有人知道吗?Expo GitHub 上似乎没有任何报道。
\n以下打包选项似乎有助于缓解一些问题
// android/app/build.gradle
android {
// This fixes a bug when
// https://github.com/facebook/react-native/issues/33120
packagingOptions {
jniLibs.useLegacyPackaging = true
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3621 次 |
| 最近记录: |