wangzhibo
4 天以前 ae6f40460dcd56af6c5f60ba52c883854c3bac55
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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'
}