#android #maven #realm #realm-migration
#Android #maven #realm #realm-миграция
Вопрос:
У меня здесь немного странный вариант использования, мой проект разделен на 2 модуля: один — серверный проект, а другой — Android-приложение, теперь они оба используют одни и те же классы моделей. Серверный проект с использованием maven build tool в eclipse и android-приложение с использованием gradle в Android studio.
Похоже, что в realm нет артефакта maven, а также не найден файл jar последней версии.
Пожалуйста, помогите мне разобраться в немного странном случае.
Комментарии:
1. В настоящее время maven не поддерживается. Соответствующая проблема github.com/realm/realm-java/issues/2342
2. Поддерживается только Gradle, потому что Realm использует Transform API.
Ответ №1:
Вам нужно внести какой-то хак в модель для совместного использования между Android и общим серверным проектом.
Вы можете создавать фиктивные классы realm для своего сервера, которые могут исключаться с помощью gradle, и вам нужно создать тот же самый точный класс в том же самом пакете. Классы для сервера:
package io.realm;
import java.util.ArrayList;
public class RealmObject extends ArrayList
{
}
package io.realm;
import java.util.ArrayList;
public class RealmList<E> extends ArrayList
{
}
Общий проект gradle должен игнорировать фиктивный класс и может использовать класс realm:
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath "io.realm:realm-gradle-plugin:2.0.2"
}
}
repositories {
mavenCentral()
jcenter()
}
apply plugin: 'com.android.library'
apply plugin: 'realm-android'
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
publishNonDefault true
defaultConfig {
minSdkVersion 19
targetSdkVersion 24
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java {
srcDirs 'src'
//Exclude server (fake) Realm dependent files to avoid conflicts with Realm framework
exclude '**/Ignore.java'
exclude '**/RealmObject.java'
exclude '**/RealmList.java'
exclude '**/PrimaryKey.java'
}
res.srcDirs = ['res']
aidl.srcDirs = ['aidl']
}
}
lintOptions {
abortOnError false
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
}
}
ПРИМЕЧАНИЕ: сервер по-прежнему не поддерживает realm. мы просто настраиваем поддержку Android и сервера для работы.
Окончательная модель:
import io.realm.RealmList;
import io.realm.RealmObject;
public class MyModel extends RealmObject