apply plugin: 'java'
|
apply plugin: 'maven-publish'
|
apply plugin:'application'
|
|
archivesBaseName = 'gadgetbridge-daogenerator'
|
|
dependencies {
|
// https://github.com/Freeyourgadget/greenDAO/tree/fyg
|
implementation 'org.greenrobot:greendao-generator:2.2.0'
|
}
|
|
sourceSets {
|
main {
|
java {
|
srcDir 'src'
|
}
|
}
|
}
|
|
mainClassName = "nodomain.freeyourgadget.gadgetbridge.daogen.GBDaoGenerator"
|
|
tasks.register('genSources', JavaExec) {
|
mainClass = mainClassName
|
classpath = sourceSets.main.runtimeClasspath
|
workingDir = '../'
|
doLast {
|
// 官方 Gadgetbridge 使用 Freeyourgadget/greenDAO 分支,会生成
|
// PRIMARY KEY ("TIMESTAMP","DEVICE_ID")。本仓库仍用原版 greendao-generator,
|
// 会把复合主键写成两列各自 PRIMARY KEY,新系统 SQLite(含华为)会直接报错闪退。
|
def dir = file("${project.rootDir}/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities")
|
int patched = 0
|
dir.eachFileMatch(~/.*Dao\.java/) { f ->
|
def src = f.getText('UTF-8')
|
def methodRe = ~/(?s)(public static void createTable\(SQLiteDatabase db, boolean ifNotExists\) \{.*?\n \})/
|
def next = src.replaceAll(methodRe) { all, method ->
|
def pks = []
|
def colRe = ~/"\\"([A-Z0-9_]+)\\" (?:INTEGER|TEXT|REAL|BLOB) PRIMARY KEY/
|
(method =~ colRe).each { m -> pks << m[1] }
|
if (pks.size() <= 1) return method
|
def out = method.replaceAll(/ PRIMARY KEY/, '')
|
def pkSql = 'PRIMARY KEY (\\"' + pks.join('\\", \\"') + '\\")'
|
def closeIdx = out.indexOf(');");')
|
if (closeIdx < 0) return method
|
return out.substring(0, closeIdx) + ', ' + pkSql + ');");' + out.substring(closeIdx + 5)
|
}
|
if (next != src) {
|
f.write(next, 'UTF-8')
|
patched++
|
}
|
}
|
println "fixCompositePrimaryKeys: patched ${patched} DAO files"
|
}
|
}
|
|
artifacts {
|
archives jar
|
}
|
|
java {
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
targetCompatibility = JavaVersion.VERSION_1_8
|
}
|
|
tasks.named("distTar") {
|
duplicatesStrategy = 'include'
|
}
|
|
tasks.named("distZip") {
|
duplicatesStrategy = 'include'
|
}
|