Kotlin中未生成MyObjectBox(对象箱库)

Shu*_*der 6 android kotlin android-gradle-plugin objectbox

我正在尝试使用对象库。

我阅读了官方文档并按照说明进行操作。但是仍然无法正常工作。

问题是当我尝试初始化boxStore对象时,找不到MyObjectBox类。

val boxStore = MyObjectBox.builder().androidContext(this).build()
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序模块。build.gradle(应用程序模块)

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

apply plugin: 'io.objectbox'

android {
    compileSdkVersion 26
    defaultConfig {
        ....
    }
    buildTypes {
        release {
           ....
        }    
    }

    sourceSets {
        main.java.srcDirs += 'src/main/java'
    }
}

kapt {
    generateStubs = true

    arguments {
        arg("objectbox.debug", true)
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

    ... other dependencies

    //object box
    implementation "io.objectbox:objectbox-android:$objectboxVersion"
    // some useful Kotlin extension functions
    implementation "io.objectbox:objectbox-kotlin:$objectboxVersion"
    kapt "io.objectbox:objectbox-processor:$objectboxVersion"

}
Run Code Online (Sandbox Code Playgroud)

这是我的项目模块:build.gradle(项目)

buildscript {
ext.kotlin_version = '1.2.10'
//all version
ext.support_version = '26.1.0'
ext.objectboxVersion = '1.3.3'

repositories {
    google()
    jcenter()
    maven { url "http://objectbox.net/beta-repo/" }
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.0.1'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files

    //object box
    classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://maven.google.com' }
        maven { url "http://objectbox.net/beta-repo/" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)

我正在几个项目中寻找可能的解决方案。我还遵循官方演示应用程序。但仍然,它对我不起作用吗?

谁能帮我解决这个问题?

Moj*_*ghi 6

我想我终于找到了解决方案:重要的部分是你必须在你的项目级 gradle 文件中编写objectbox-gradle-plugin, 上面kotlin-gradle-plugin的代码,代码如下所示:

classpath 'com.android.tools.build:gradle:3.2.1'
classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
Run Code Online (Sandbox Code Playgroud)

之后,apply plugin:...在应用级gradle中的other下添加以下几行

apply plugin: 'kotlin-kapt'
apply plugin: 'io.objectbox'
Run Code Online (Sandbox Code Playgroud)

最重要的是,你必须至少制作一个@Entity类并重建项目,并且MyObjectBox会出现。

  • 关键是“apply plugin: 'kotlin-kapt'” 调用,因为它会生成所需的资产。 (3认同)

小智 1

你的设置看起来不错。请注意,您不需要添加objectbox-androidobjectbox-kotlinobjectbox-processor依赖项。该插件将为您做这件事。

您是否至少定义了一个@Entity 类?例如:

@Entity
public class User { 
    @Id
    private long id;

    private String name;
}
Run Code Online (Sandbox Code Playgroud)

然后构建>制作项目。注释处理器应该选取实体并生成 MyObjectBox 类。