首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使Kotlin能够与裸工作流反应本地世博会的困难

使Kotlin能够与裸工作流反应本地世博会的困难
EN

Stack Overflow用户
提问于 2022-05-10 23:40:18
回答 1查看 1.9K关注 0票数 6

说我花了大约32个小时,这是轻描淡写的说法。我一直试图使Kotlin在一个反应本地项目由世博SDK 44提供动力。

我一直在尝试在互联网上找到所有我能找到的东西,但是在EAS中的分级阶段(用eas build --profile development --platform android运行它)总是会出现错误。

以下是我的配置:

,我省略了简洁的代码。如果您需要更多的上下文,请告诉我

app\android\build.gradle:

代码语言:javascript
运行
复制
buildscript {
    ext {
        buildToolsVersion = "30.0.2"
        minSdkVersion = 21
        compileSdkVersion = 31
        targetSdkVersion = 31
        kotlinVersion = "1.4.11"
    }
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:4.1.0")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
       
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
代码语言:javascript
运行
复制
apply plugin: "kotlin-android"
apply plugin: "kotlin-android-extensions"

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    //noinspection GradleDynamicVersion
    implementation "com.facebook.react:react-native:+"  // From node_modules
    implementation project(':react-native-plaid-link-sdk')

    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3'
    implementation 'androidx.core:core-ktx:1.1.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"

// Other comed omitted
}

这是我的package.json

代码语言:javascript
运行
复制
{
    "name": "@pana/app",
    "version": "22.0220",
    "private": true,
    "scripts": {
        "start": "expo start --dev-client",
        "android": "expo run:android",
        "ios": "expo run:ios",
        "eject": "expo eject",
        "extract": "lingui extract",
        "compile": "lingui compile",
        "lint": "eslint src/** --ext .ts,.tsx",
        "lint:fix": "yarn lint --fix",
        "test": "jest",
        "graphql:generate": "graphql-codegen --config codegen.yml",
        "build": ""
    },
    "dependencies": {
        "@apollo/client": "^3.5.10",
        "@apollo/link-context": "^2.0.0-beta.3",
        "@expo/react-native-action-sheet": "^3.13.0",
        "@intercom/intercom-react-native": "^3.0.0",
        "@lingui/react": "^3.13.2",
        "@onfido/react-native-sdk": "^5.1.0",
        "@react-native-async-storage/async-storage": "~1.15.0",
        "@react-native-community/datetimepicker": "4.0.0",
        "@react-navigation/bottom-tabs": "^6.3.1",
        "@react-navigation/native": "^6.0.8",
        "@react-navigation/stack": "^6.1.1",
        "@reduxjs/toolkit": "^1.8.0",
        "@segment/analytics-react-native": "^2.1.12",
        "@segment/sovran-react-native": "^0.2.6",
        "@sentry/react-native": "^3.2.13",
        "axios": "^0.25.0",
        "dayjs": "^1.10.8",
        "expo": "~44.0.0",
        "expo-application": "~4.0.1",
        "expo-auth-session": "~3.5.0",
        "expo-cellular": "~4.1.0",
        "expo-clipboard": "~2.1.0",
        "expo-constants": "~13.0.1",
        "expo-crypto": "~10.1.1",
        "expo-dev-client": "~0.8.5",
        "expo-device": "~4.1.0",
        "expo-document-picker": "~10.1.3",
        "expo-image-loader": "~3.1.0",
        "expo-image-picker": "~12.0.2",
        "expo-linear-gradient": "~11.0.3",
        "expo-local-authentication": "~12.1.0",
        "expo-random": "~12.1.1",
        "expo-secure-store": "~11.1.0",
        "expo-splash-screen": "~0.14.1",
        "expo-status-bar": "~1.2.0",
        "expo-updates": "~0.11.7",
        "make-plural": "^7.1.0",
        "react": "17.0.1",
        "react-dom": "17.0.1",
        "react-native": "0.64.3",
        "react-native-animated-progress": "^1.0.2",
        "react-native-country-picker-modal": "^2.0.0",
        "react-native-dotenv": "^3.3.1",
        "react-native-gesture-handler": "~2.1.0",
        "react-native-keyboard-aware-scroll-view": "^0.9.5",
        "react-native-phone-number-input": "^2.1.0",
        "react-native-plaid-link-sdk": "^7.4.0",
        "react-native-safe-area-context": "3.3.2",
        "react-native-screens": "~3.10.1",
        "react-native-shimmer-placeholder": "^2.0.8",
        "react-native-svg": "12.1.1",
        "react-native-uuid": "^2.0.1",
        "react-native-web": "0.17.1",
        "react-native-webview": "11.15.0",
        "react-redux": "^7.2.6",
        "semver-compare": "^1.0.0",
        "sentry-expo": "^4.0.0",
        "styled-components": "5.2.0",
        "styled-system": "^5.1.5",
        "validate.js": "^0.13.1"
    },
    "devDependencies": {
        "@babel/core": "^7.12.9",
        "@graphql-codegen/cli": "2.6.2",
        "@graphql-codegen/typescript": "2.4.8",
        "@graphql-codegen/typescript-operations": "2.3.5",
        "@graphql-codegen/typescript-react-apollo": "3.2.11",
        "@lingui/cli": "^3.13.2",
        "@lingui/macro": "^3.13.2",
        "@react-native-community/eslint-config": "^3.0.1",
        "@types/jest": "^27.4.0",
        "@types/react": "~17.0.21",
        "@types/react-native": "~0.64.12",
        "@types/react-native-animated-progress": "^1.0.0",
        "@types/react-native-dotenv": "^0.2.0",
        "@types/react-redux": "^7.1.23",
        "@types/semver-compare": "^1.0.1",
        "@types/styled-components": "^5.1.24",
        "@types/styled-components-react-native": "5.1.0",
        "@types/styled-system": "^5.1.15",
        "@typescript-eslint/eslint-plugin": "^5.10.2",
        "@typescript-eslint/parser": "^5.10.2",
        "eslint": "^8.8.0",
        "eslint-config-airbnb": "^19.0.4",
        "eslint-config-prettier": "^8.3.0",
        "eslint-import-resolver-typescript": "^2.5.0",
        "eslint-plugin-flowtype": "^8.0.3",
        "eslint-plugin-import": "^2.25.4",
        "eslint-plugin-jest": "^26.1.0",
        "eslint-plugin-jsx-a11y": "^6.5.1",
        "eslint-plugin-prettier": "^4.0.0",
        "eslint-plugin-react": "^7.28.0",
        "eslint-plugin-react-hooks": "^4.3.0",
        "graphql": "^16.3.0",
        "install-peers": "^1.0.3",
        "jest": "^27.5.0",
        "prettier": "^2.5.1",
        "react-native-config": "^1.4.5",
        "react-native-svg-transformer": "^1.0.0",
        "remote-redux-devtools": "^0.5.16",
        "ts-jest": "^27.1.3",
        "typescript": "~4.3.5"
    },
    "jest": {
        "preset": "react-native",
        "moduleFileExtensions": [
            "ts",
            "tsx",
            "js",
            "jsx",
            "json",
            "node"
        ]
    },
    "resolutions": {
        "react-devtools-core": "4.14.0",
        "@types/react": "17.0.21",
        "@types/react-dom": "17.0.01"
    }
}

这是我的文件夹结构:

这里是(android\app\src\main\java\com\pana\MyAppPackage.kt) MyAppPackage.kt

代码语言:javascript
运行
复制
package com.pana // replace your-app-name with your app’s name

import android.view.View
import com.facebook.react.ReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.uimanager.ReactShadowNode
import com.facebook.react.uimanager.ViewManager

class MyAppPackage : ReactPackage {

    override fun createViewManagers(
        reactContext: ReactApplicationContext
    ): MutableList<ViewManager<View, ReactShadowNode<*>>> = mutableListOf()

    override fun createNativeModules(
        reactContext: ReactApplicationContext
    ): MutableList<NativeModule> = listOf(CalendarModule(reactContext)).toMutableList()


}

下面是我重新创建的一些这样的资源:

下面是我研究过的一些资源:

以下是我尝试过的一些错误和修复:

1-将项目最小增量到赤骨Kotlin

我尝试将当前项目的增量降到最低(注意,我必须将对讲机包的compileSdkVersiontargetSdkVersion设置为31,这是成功构建的)。我遵循了这段视频,官方的反应土著医生,以及Android的将Kotlin添加到现有的应用程序中 (手动方法)。

a. (android/build.gradle)添加(Inside buildscript.ext) kotlin_version = '1.4.10' b. (android/kotlin_version = '1.4.10'b.)添加(内部依赖项) classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" c. (android/app/classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")添加(文件顶部) apply plugin: "kotlin-android"

试图编译:

代码语言:javascript
运行
复制
[stderr] Note: Recompile with -Xlint:deprecation for details.
> Task :app:compileDebugKotlin FAILED w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
    /home/expo/.gradle/caches/transforms-3/f47aaec93b5ce8275ab670559bc858c7/transformed/jetified-kotlin-stdlib-jdk8-1.5.31.jar (version 1.5)
    /home/expo/.gradle/caches/transforms-3/e30ac7ea6364b484c3bc3c923afeabd2/transformed/jetified-kotlin-stdlib-jdk7-1.5.31.jar (version 1.5)
    /home/expo/.gradle/caches/transforms-3/d9723caca13068e43e601371da49b5b2/transformed/jetified-kotlin-stdlib-1.6.10.jar (version 1.6)
    /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.

2-将Kotlin推至1.6.10版

看到这一点,我进行了一些研究,并建议将Kotlin版本推到1.6.10:

代码语言:javascript
运行
复制
Task :expo-dev-launcher:compileDebugKotlin
[stderr] Compilation with Kotlin compile daemon was not successful
[stderr] java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
[stderr]    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
[stderr]    java.io.InvalidClassException: org.jetbrains.kotlin.incremental.IncrementalModuleInfo; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 0
[stderr]    at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:391)
[stderr]    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
[stderr]    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
[stderr]    at java.base/java.security.AccessController.doPrivileged(Native Method)
[stderr]    at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
[stderr]    at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
[stderr]    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
[stderr]    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
[stderr]    at java.base/java.security.AccessController.doPrivileged(Native Method)
[stderr]    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
[stderr]    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[stderr]    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[stderr]    at java.base/java.lang.Thread.run(Thread.java:829)
[stderr]    at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:303)
[stderr]    at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:279)
[stderr]    at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:164)

这将导致我更新以运行expo upgradeexpo doctor,以查看其中的任何更新是否有效。这打开了潘多拉的盒子。升级到expo 45有它自己的问题(显然,我有一些冲突的包抛出以下错误):

代码语言:javascript
运行
复制
[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.
[stderr] Note: Recompile with -Xlint:deprecation for details.
> Task :app:compileDebugJavaWithJavac FAILED
[stderr] /home/expo/workingdir/build/app/android/app/src/main/java/app/pana/MainApplication.java:6: error: package android.app does not exist
[stderr] import android.app.Application;
[stderr]                   ^
[stderr] /home/expo/workingdir/build/app/android/app/src/main/java/app/pana/MainApplication.java:7: error: package android.content does not exist
[stderr] import android.content.Context;
[stderr]                       ^
[stderr] /home/expo/workingdir/build/app/android/app/src/main/java/app/pana/MainApplication.java:8: error: package android.content.res does not exist
[stderr] import android.content.res.Configuration;
[stderr]                           ^
[stderr] /home/expo/workingdir/build/app/android/app/src/main/java/app/pana/MainApplication.java:10: error: package android.webkit does not exist
[stderr] import android.webkit.WebView;

还有其他版本在expo-dev-client上失败了。我还注意到SDK 45中有一个bug,您将在启用Hermes时遇到问题。我们在用JSC。

3-其他一些事情

为了防止这个问题变得更长,下面是我尝试过的其他事情:

a.将gradle-wrapper.properties中的gradle-wrapper.properties更改为最近的gradle版本。

更新和计算org.jetbrains.kotlin:kotlin-gradle-plugin (在android/build.gradle中)、org.jetbrains.kotlin:kotlin-stdlib-jdk7 (将其更改为jdk8和nothing)、org.jetbrains.kotlinx:kotlinx-coroutines-coreorg.jetbrains.kotlinx:kotlinx-coroutines-androidandroidx.core:core-ktx以及相应的kotlin版本。

c.在debugImplementation语句中添加了这些实现。

d.研究反应与Kotlin相对应的本地版本(不知道0.64版本,即世博的SDK 44是否支持Kotlin 1.6.10)。

使用Android检查语法错误。

洗净了梯度。

还有其他东西..。

有人知道些什么吗?世博会GitHub中似乎没有任何报道。

EN

回答 1

Stack Overflow用户

发布于 2022-11-30 20:15:02

下面的packagingOptions似乎有助于缓解一些问题

代码语言:javascript
运行
复制
// android/app/build.gradle
android {
    // This fixes a bug when 
    // https://github.com/facebook/react-native/issues/33120
    packagingOptions {
        jniLibs.useLegacyPackaging = true
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72193971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档