Commit fd014f0b565ba2db091932a94edbe82a4f444ec5

Authored by 张道锋
1 parent ba2f7301

no message

app/build.gradle
... ... @@ -45,7 +45,36 @@ android {
45 45 task processorTask(type: Copy) {
46 46 from '../processor/build/libs/processor.jar' into 'libs/'
47 47 }
  48 +
  49 +//region 如果需要注释,注释掉可以合并起来的这一段全部
  50 +task fileCheckTask() {
  51 + //delete('/app/src/main/assets/migrations')
  52 + //此方法执行以后会删除所有的version.sql文件,不能主动添加sql语句
  53 + //如果已经定义、实现的注解不能满足更新要求,请自己添加sql语句,并且将下面删除文件的语句注释
  54 + //注意 注释以后不要打开(写这个task是为了试验)
  55 + doLast {
  56 + File file = new File(rootDir.getAbsolutePath() + "\\app\\src\\main\\assets\\migrations")
  57 + File[] files = file.listFiles()
  58 + for (int i = 0; i < files.length; i++) {
  59 + File file1 = files[i]
  60 + println("delete : "+file1.getAbsolutePath())
  61 + file1.delete()
  62 + }
  63 + }
  64 +}
  65 +
  66 +afterEvaluate {
  67 + tasks.matching {
  68 + it.name.startsWith('process') && (it.name.endsWith('ReleaseJavaRes') || it.name.endsWith
  69 + ('DebugJavaRes'))
  70 + }.each { tk ->
  71 + tk.dependsOn(fileCheckTask)
  72 + }
  73 +}
  74 +//endregion
  75 +
48 76 processorTask.dependsOn(':processor:build')
  77 +
49 78 preBuild.dependsOn(processorTask)
50 79 greendao {
51 80 schemaVersion 1//数据库版本升级
... ... @@ -66,4 +95,4 @@ dependencies {
66 95 compile 'me.leolin:ShortcutBadger:1.1.19@aar'
67 96 annotationProcessor 'com.google.dagger:dagger-compiler:2.12'
68 97 compile files('libs/processor.jar')
69 98 -}
  99 +}
70 100 \ No newline at end of file
... ...
app/libs/processor.jar
No preview for this file type
app/src/main/assets/migrations/1.sql
... ... @@ -1,2 +0,0 @@
1   -ALTER table message add COLUMN test TEXT
2   -UPDATE message SET test = 'sql默认' WHERE test= NULL
app/src/main/assets/migrations/3.sql 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +ALTER table test ADD COLUMN age INTEGER
  2 +ALTER table test ADD COLUMN area INTEGER
  3 +ALTER table test ADD COLUMN name TEXT
... ...
app/src/main/java/com/shunzhi/parent/annotation/VersionTest.java
... ... @@ -2,6 +2,11 @@ package com.shunzhi.parent.annotation;
2 2  
3 3 import org.shunzhi.processorlibs.AddColumn;
4 4  
  5 +/*
  6 +Error:groovy.lang.MissingMethodException: No signature of method:
  7 +java.io.File.plus() is applicable for argument types: (java.lang.String) values: [\app\src\main\assets\migrations]
  8 + */
  9 +
5 10 public class VersionTest {
6 11 @AddColumn(version = 3, tableName = "test", type = "String")
7 12 private String name;
... ...
processor/src/main/java/org/shunzhi/processorlibs/Update.java 0 → 100644
... ... @@ -0,0 +1,39 @@
  1 +package org.shunzhi.processorlibs;
  2 +
  3 +import java.lang.annotation.ElementType;
  4 +import java.lang.annotation.Retention;
  5 +import java.lang.annotation.RetentionPolicy;
  6 +import java.lang.annotation.Target;
  7 +
  8 +/**
  9 + * 可能会使用到,只定义了注解,逻辑处理需要在VersionProcessor类中实现<p/>
  10 + * 需要使用的时候自己实现
  11 + */
  12 +@Target(ElementType.FIELD)
  13 +@Retention(RetentionPolicy.SOURCE)
  14 +public @interface Update {
  15 + String columnName();
  16 +
  17 + String tableName();
  18 +
  19 + int version();
  20 +
  21 + /**
  22 + * 请设置类型
  23 + * {@link Update#valueType()}
  24 + */
  25 + String strValue() default "";
  26 +
  27 + /**
  28 + * 请设置类型
  29 + * {@link Update#valueType()}
  30 + */
  31 + int intValue() default -1;
  32 +
  33 + /**
  34 + * 类型需要与值对应,不对应可能会导致更新数据库失败
  35 + */
  36 + String valueType();
  37 +
  38 + boolean boolValue() default false;
  39 +}
... ...
processor/src/main/java/org/shunzhi/processorlibs/VersionProcessor.java
... ... @@ -8,8 +8,11 @@ import java.io.FileWriter;
8 8 import java.io.IOException;
9 9 import java.io.OutputStreamWriter;
10 10 import java.io.PrintStream;
  11 +import java.text.SimpleDateFormat;
  12 +import java.util.Date;
11 13 import java.util.HashMap;
12 14 import java.util.HashSet;
  15 +import java.util.Locale;
13 16 import java.util.Set;
14 17  
15 18 import javax.annotation.processing.AbstractProcessor;
... ... @@ -31,24 +34,31 @@ public class VersionProcessor extends AbstractProcessor {
31 34 public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
32 35 // File file = new File("test");
33 36 // if (!file.exists())file.mkdir();
34   -// File countFile = new File("测试数据.txt");
35   -// try {
36   -// BufferedWriter writer = new BufferedWriter(new FileWriter(countFile));
37   -// writer.write(System.currentTimeMillis() + "");
38   -// writer.newLine();
39   -// writer.flush();writer.close();
40   -// } catch (IOException e) {
41   -// e.printStackTrace();
42   -// }
  37 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ", Locale.CHINA);
  38 + File countFile = new File("buildData.txt");
  39 + BufferedWriter writer = null;
  40 + try {
  41 + writer = new BufferedWriter(new FileWriter(countFile));
  42 + writer.write(format.format(new Date()));
  43 + writer.newLine();
  44 + writer.flush();
  45 + //writer.close();
  46 + } catch (IOException e) {
  47 + e.printStackTrace();
  48 + }
43 49  
44 50 BufferedWriter testBw = null;
45 51  
46 52 HashMap<Integer, Set<String>> map = new HashMap<>();
47 53  
48 54 try {
  55 + File file = new File("sql.txt");
  56 + //if (!file.exists()) file.createNewFile();
  57 + Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(AddColumn.class);
  58 + writer.write("annotations size = " + elements.size());
49 59 for (Element element : roundEnv.getElementsAnnotatedWith(AddColumn.class)) {
50   - File file = new File("sql.txt");
51   - if (!file.exists()) file.createNewFile();
  60 + writer.write(element.getSimpleName().toString());
  61 + writer.newLine();
52 62 testBw = new BufferedWriter(new OutputStreamWriter(new PrintStream(file)));
53 63 AddColumn addColumn = element.getAnnotation(AddColumn.class);
54 64 int version = addColumn.version();
... ... @@ -72,6 +82,8 @@ public class VersionProcessor extends AbstractProcessor {
72 82 if (!isDebug)
73 83 set.add(sql);
74 84 }
  85 + writer.write(sql);
  86 + writer.newLine();
75 87 if (isDebug) {
76 88 testBw.write(version + " ");
77 89 testBw.write(sql);
... ... @@ -91,27 +103,52 @@ public class VersionProcessor extends AbstractProcessor {
91 103 }
92 104 }
93 105 File tmp = new File("tmp");
94   -// File migrations = new File(tmp.getParentFile(), "app\\src\\main\\assets\\migrations\\".replace("\\", File.separator));
  106 + File migrations = new File(tmp.getParentFile(), "app\\src\\main\\assets\\migrations\\".replace("\\", File.separator));
  107 + try {
  108 + writer.newLine();
  109 + writer.write(map.toString());
  110 + writer.newLine();
  111 + } catch (IOException e) {
  112 + e.printStackTrace();
  113 + }
95 114 // if (migrations.exists()) {
96 115 // File[] files = migrations.listFiles();
97   -// if (files != null)
  116 +// if (files != null) {
98 117 // for (File f : files) {
99 118 // try {
  119 +// writer.write("exist files" + f.getName());
  120 +// writer.newLine();
  121 +// writer.flush();
100 122 // Integer existVersion = Integer.parseInt(f.getName().replace(".sql", ""));
101 123 // if (existVersion < 2) continue;
102 124 // if (!map.containsKey(existVersion)) {
  125 +// writer.write("delete file" + f.getName());
  126 +// writer.newLine();
  127 +// writer.flush();
103 128 // f.delete();
104 129 // }
105   -// } catch (NumberFormatException e) {
  130 +// } catch (Exception e) {
106 131 // e.printStackTrace();
107 132 // }
108 133 // }
  134 +// }
109 135 // }
  136 +
  137 + try {
  138 + writer.write("will create sql file");
  139 + writer.newLine();
  140 + writer.write(map.toString());
  141 + } catch (IOException e) {
  142 + e.printStackTrace();
  143 + }
110 144 for (Integer version : map.keySet()) {
111 145 try {
112 146 String path = "app\\src\\main\\assets\\migrations\\".replace("\\", File.separator) + version + ".sql";
113 147 File file = new File(tmp.getParentFile(), path);
114 148 Set<String> set = map.get(version);
  149 + writer.write("create file" + version + ".sql");
  150 + writer.newLine();
  151 + writer.flush();
115 152 if (file.exists()) {
116 153 BufferedReader br = new BufferedReader(new FileReader(file));
117 154 String buffer;
... ... @@ -119,6 +156,8 @@ public class VersionProcessor extends AbstractProcessor {
119 156 set.add(buffer);
120 157 }
121 158 br.close();
  159 + } else {
  160 + file.createNewFile();
122 161 }
123 162 BufferedWriter bw = new BufferedWriter(new FileWriter(file));
124 163 StringBuilder builder = new StringBuilder();
... ... @@ -133,6 +172,11 @@ public class VersionProcessor extends AbstractProcessor {
133 172 e.printStackTrace();
134 173 }
135 174 }
  175 + try {
  176 + writer.close();
  177 + } catch (IOException e) {
  178 + e.printStackTrace();
  179 + }
136 180 return true;
137 181 }
138 182 }
139 183 \ No newline at end of file
... ...