diff --git a/app/build.gradle b/app/build.gradle index 69827a7..b82f14a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,7 +45,36 @@ android { task processorTask(type: Copy) { from '../processor/build/libs/processor.jar' into 'libs/' } + +//region 如果需要注释,注释掉可以合并起来的这一段全部 +task fileCheckTask() { + //delete('/app/src/main/assets/migrations') + //此方法执行以后会删除所有的version.sql文件,不能主动添加sql语句 + //如果已经定义、实现的注解不能满足更新要求,请自己添加sql语句,并且将下面删除文件的语句注释 + //注意 注释以后不要打开(写这个task是为了试验) + doLast { + File file = new File(rootDir.getAbsolutePath() + "\\app\\src\\main\\assets\\migrations") + File[] files = file.listFiles() + for (int i = 0; i < files.length; i++) { + File file1 = files[i] + println("delete : "+file1.getAbsolutePath()) + file1.delete() + } + } +} + +afterEvaluate { + tasks.matching { + it.name.startsWith('process') && (it.name.endsWith('ReleaseJavaRes') || it.name.endsWith + ('DebugJavaRes')) + }.each { tk -> + tk.dependsOn(fileCheckTask) + } +} +//endregion + processorTask.dependsOn(':processor:build') + preBuild.dependsOn(processorTask) greendao { schemaVersion 1//数据库版本升级 @@ -66,4 +95,4 @@ dependencies { compile 'me.leolin:ShortcutBadger:1.1.19@aar' annotationProcessor 'com.google.dagger:dagger-compiler:2.12' compile files('libs/processor.jar') -} +} \ No newline at end of file diff --git a/app/libs/processor.jar b/app/libs/processor.jar index 486ef7a..279fe2c 100644 Binary files a/app/libs/processor.jar and b/app/libs/processor.jar differ diff --git a/app/src/main/assets/migrations/1.sql b/app/src/main/assets/migrations/1.sql deleted file mode 100644 index 6ac2fbd..0000000 --- a/app/src/main/assets/migrations/1.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER table message add COLUMN test TEXT -UPDATE message SET test = 'sql默认' WHERE test= NULL diff --git a/app/src/main/assets/migrations/3.sql b/app/src/main/assets/migrations/3.sql new file mode 100644 index 0000000..24d224b --- /dev/null +++ b/app/src/main/assets/migrations/3.sql @@ -0,0 +1,3 @@ +ALTER table test ADD COLUMN age INTEGER +ALTER table test ADD COLUMN area INTEGER +ALTER table test ADD COLUMN name TEXT diff --git a/app/src/main/java/com/shunzhi/parent/annotation/VersionTest.java b/app/src/main/java/com/shunzhi/parent/annotation/VersionTest.java index 7c38bb6..8dd616c 100644 --- a/app/src/main/java/com/shunzhi/parent/annotation/VersionTest.java +++ b/app/src/main/java/com/shunzhi/parent/annotation/VersionTest.java @@ -2,6 +2,11 @@ package com.shunzhi.parent.annotation; import org.shunzhi.processorlibs.AddColumn; +/* +Error:groovy.lang.MissingMethodException: No signature of method: +java.io.File.plus() is applicable for argument types: (java.lang.String) values: [\app\src\main\assets\migrations] + */ + public class VersionTest { @AddColumn(version = 3, tableName = "test", type = "String") private String name; diff --git a/processor/src/main/java/org/shunzhi/processorlibs/Update.java b/processor/src/main/java/org/shunzhi/processorlibs/Update.java new file mode 100644 index 0000000..398bd0d --- /dev/null +++ b/processor/src/main/java/org/shunzhi/processorlibs/Update.java @@ -0,0 +1,39 @@ +package org.shunzhi.processorlibs; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 可能会使用到,只定义了注解,逻辑处理需要在VersionProcessor类中实现

+ * 需要使用的时候自己实现 + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.SOURCE) +public @interface Update { + String columnName(); + + String tableName(); + + int version(); + + /** + * 请设置类型 + * {@link Update#valueType()} + */ + String strValue() default ""; + + /** + * 请设置类型 + * {@link Update#valueType()} + */ + int intValue() default -1; + + /** + * 类型需要与值对应,不对应可能会导致更新数据库失败 + */ + String valueType(); + + boolean boolValue() default false; +} diff --git a/processor/src/main/java/org/shunzhi/processorlibs/VersionProcessor.java b/processor/src/main/java/org/shunzhi/processorlibs/VersionProcessor.java index 506ebb0..9ca6b7d 100644 --- a/processor/src/main/java/org/shunzhi/processorlibs/VersionProcessor.java +++ b/processor/src/main/java/org/shunzhi/processorlibs/VersionProcessor.java @@ -8,8 +8,11 @@ import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintStream; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.Locale; import java.util.Set; import javax.annotation.processing.AbstractProcessor; @@ -31,24 +34,31 @@ public class VersionProcessor extends AbstractProcessor { public boolean process(Set annotations, RoundEnvironment roundEnv) { // File file = new File("test"); // if (!file.exists())file.mkdir(); -// File countFile = new File("测试数据.txt"); -// try { -// BufferedWriter writer = new BufferedWriter(new FileWriter(countFile)); -// writer.write(System.currentTimeMillis() + ""); -// writer.newLine(); -// writer.flush();writer.close(); -// } catch (IOException e) { -// e.printStackTrace(); -// } + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ", Locale.CHINA); + File countFile = new File("buildData.txt"); + BufferedWriter writer = null; + try { + writer = new BufferedWriter(new FileWriter(countFile)); + writer.write(format.format(new Date())); + writer.newLine(); + writer.flush(); + //writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } BufferedWriter testBw = null; HashMap> map = new HashMap<>(); try { + File file = new File("sql.txt"); + //if (!file.exists()) file.createNewFile(); + Set elements = roundEnv.getElementsAnnotatedWith(AddColumn.class); + writer.write("annotations size = " + elements.size()); for (Element element : roundEnv.getElementsAnnotatedWith(AddColumn.class)) { - File file = new File("sql.txt"); - if (!file.exists()) file.createNewFile(); + writer.write(element.getSimpleName().toString()); + writer.newLine(); testBw = new BufferedWriter(new OutputStreamWriter(new PrintStream(file))); AddColumn addColumn = element.getAnnotation(AddColumn.class); int version = addColumn.version(); @@ -72,6 +82,8 @@ public class VersionProcessor extends AbstractProcessor { if (!isDebug) set.add(sql); } + writer.write(sql); + writer.newLine(); if (isDebug) { testBw.write(version + " "); testBw.write(sql); @@ -91,27 +103,52 @@ public class VersionProcessor extends AbstractProcessor { } } File tmp = new File("tmp"); -// File migrations = new File(tmp.getParentFile(), "app\\src\\main\\assets\\migrations\\".replace("\\", File.separator)); + File migrations = new File(tmp.getParentFile(), "app\\src\\main\\assets\\migrations\\".replace("\\", File.separator)); + try { + writer.newLine(); + writer.write(map.toString()); + writer.newLine(); + } catch (IOException e) { + e.printStackTrace(); + } // if (migrations.exists()) { // File[] files = migrations.listFiles(); -// if (files != null) +// if (files != null) { // for (File f : files) { // try { +// writer.write("exist files" + f.getName()); +// writer.newLine(); +// writer.flush(); // Integer existVersion = Integer.parseInt(f.getName().replace(".sql", "")); // if (existVersion < 2) continue; // if (!map.containsKey(existVersion)) { +// writer.write("delete file" + f.getName()); +// writer.newLine(); +// writer.flush(); // f.delete(); // } -// } catch (NumberFormatException e) { +// } catch (Exception e) { // e.printStackTrace(); // } // } +// } // } + + try { + writer.write("will create sql file"); + writer.newLine(); + writer.write(map.toString()); + } catch (IOException e) { + e.printStackTrace(); + } for (Integer version : map.keySet()) { try { String path = "app\\src\\main\\assets\\migrations\\".replace("\\", File.separator) + version + ".sql"; File file = new File(tmp.getParentFile(), path); Set set = map.get(version); + writer.write("create file" + version + ".sql"); + writer.newLine(); + writer.flush(); if (file.exists()) { BufferedReader br = new BufferedReader(new FileReader(file)); String buffer; @@ -119,6 +156,8 @@ public class VersionProcessor extends AbstractProcessor { set.add(buffer); } br.close(); + } else { + file.createNewFile(); } BufferedWriter bw = new BufferedWriter(new FileWriter(file)); StringBuilder builder = new StringBuilder(); @@ -133,6 +172,11 @@ public class VersionProcessor extends AbstractProcessor { e.printStackTrace(); } } + try { + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } return true; } } \ No newline at end of file -- libgit2 0.21.0