簡體   English   中英

Kotlin Android 擴展在庫類型模塊中不起作用

[英]Kotlin Android Extensions does not work in a library type module

我正在嘗試實現 kotlin android 擴展以使用 @Parcelize 注釋,如果我在應用程序的模塊('com.android.application')中實現它,它就可以正常工作,但是當我嘗試在庫類型中使用它時模塊('com.android.library')它對我不起作用。

我的gradle配置如下:

Build.gradle // 應用程序

apply plugin: 'com.android.application'
apply plugin: 'jacoco'
apply plugin: 'io.fabric'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

apply plugin: 'kotlin-allopen'
apply plugin: 'androidx.navigation.safeargs'

allOpen {
  annotation 'com.juanlondono.app.soldi.testing.OpenClass'
}

androidExtensions {
  experimental = true
}

dependencies {
  implementation fileTree(dir: 'libs', include: ['*.jar'])

  // ------------------------- KOTLIN ------------------------- //
  implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.11"

 ... // Other Dependencies

}

Build.gradle // 庫

    apply plugin: 'com.android.library'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-android-extensions'

    dependencies {
      implementation fileTree(dir: 'libs', include: ['*.jar'])
    
      // ------------------------- KOTLIN ------------------------- //
      implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.11"
   
    ... // Other Dependencies
    }

為了配置 kotlin android 擴展,我基於以下指南: Kotlinlang

在進行之前的配置后,我嘗試實現 @Parcelize 注釋,但它不起作用我收到未解析引用 Parcelize的消息

添加

androidExtensions {
   experimental = true
} 

在庫的gradle,出現如下錯誤:

Cannot invoke method get() on null object

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:prodDebugRuntimeClasspath'.
   > A problem occurred configuring project ':model'.
      > Failed to notify dependency resolution listener.
         > Cannot invoke method get() on null object
         > Cannot invoke method get() on null object
         > Cannot invoke method get() on null object
         > Cannot invoke method get() on null object

目前,Parcelable 的實現是手動完成的。

更新

最近 kotlin 擴展被棄用,取而代之的是 kotlin-parcelize 以使項目工作,必須更改以下內容:

步驟 1:更新到最新的 kotlin 版本(1.4.20)或更新版本

第 2 apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-android-extensions'替換為這個apply plugin: 'kotlin-parcelize'

第 2 步:從 android {} 中刪除此代碼

androidExtensions {
    experimental = true
}

第 3 步:將舊的 import import kotlinx.android.parcel.Parcelize替換為新的 import import kotlinx.parcelize.Parcelize

我剛剛排練了Kotlin 1.3.50的版本,它在以下配置下正常工作:

項目必須是com.android.applicationcom.android.library類型。 就我而言,我使用的是android.library類型的項目。

build.gradle(庫)

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
  ...
}

androidExtensions {
  experimental = true
}

dependencies {
  ...
}

模型類

import android.os.Parcelable
import kotlinx.android.parcel.Parcelize

@Parcelize
data class Test(val prop: String) : Parcelable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM