From aa04a0178e91bd33ef4f2d892ecbea741c607af5 Mon Sep 17 00:00:00 2001 From: Ishan Gogna Date: Tue, 26 Jun 2018 18:45:46 +0530 Subject: [PATCH] Updated the build tools version and android sdk versions. Added changes from: https://github.com/jgilfelt/android-sqlite-asset-helper/pull/28 https://github.com/jgilfelt/android-sqlite-asset-helper/pull/37 https://github.com/jgilfelt/android-sqlite-asset-helper/pull/48 https://github.com/jgilfelt/android-sqlite-asset-helper/pull/83 https://github.com/jgilfelt/android-sqlite-asset-helper/pull/87 https://github.com/jgilfelt/android-sqlite-asset-helper/pull/109 --- build.gradle | 13 +- gradle.properties | 29 ++-- gradle/wrapper/gradle-wrapper.jar | Bin 49896 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 78 +++++----- gradlew.bat | 14 +- library/build.gradle | 20 +-- .../sqliteasset/SQLiteAssetHelper.java | 141 +++++++++++++----- .../readystatesoftware/sqliteasset/Utils.java | 30 +++- samples/database-v1/build.gradle | 12 +- samples/database-v13-upgrade/build.gradle | 17 ++- samples/database-v2-upgrade/build.gradle | 12 +- 12 files changed, 223 insertions(+), 147 deletions(-) diff --git a/build.gradle b/build.gradle index 88e39d0..d480e1f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,18 +1,21 @@ buildscript { repositories { mavenCentral() + google() } dependencies { - classpath "com.android.tools.build:gradle:0.7.+" + classpath "com.android.tools.build:gradle:$build_tools_version" } } - +project.ext { + min_sdk_version = 19 + target_sdk_version = 22 + compile_sdk_version = 27 +} allprojects { - version = VERSION_NAME - group = GROUP - repositories { mavenCentral() + google() } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 55c57de..b769cff 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,14 +1,17 @@ -VERSION_NAME=2.0.2-SNAPSHOT -VERSION_CODE=202 -GROUP=com.readystatesoftware.sqliteasset +## Project-wide Gradle settings. +# +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx1024m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +#Thu Dec 28 11:37:07 IST 2017 -POM_DESCRIPTION=An Android helper class to manage database creation and version management using an application's raw asset files -POM_URL=https://github.com/jgilfelt/android-sqlite-asset-helper -POM_SCM_URL=https://github.com/jgilfelt/android-sqlite-asset-helper -POM_SCM_CONNECTION=scm:git@github.com:jgilfelt/android-sqlite-asset-helper.git -POM_SCM_DEV_CONNECTION=scm:git@github.com:jgilfelt/android-sqlite-asset-helper.git -POM_LICENCE_NAME=The Apache Software License, Version 2.0 -POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt -POM_LICENCE_DIST=repo -POM_DEVELOPER_ID=jgilfelt -POM_DEVELOPER_NAME=Jeff Gilfelt +build_tools_version=3.1.3 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 8c0fb64a8698b08ecc4158d828ca593c4928e9dd..7a3265ee94c0ab25cf079ac8ccdf87f41d455d42 100644 GIT binary patch delta 48649 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 KGSS{&-~JEgSo0qM delta 44012 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,31 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -114,6 +113,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index aec9973..e95643d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/library/build.gradle b/library/build.gradle index b8b9d9e..dd876f9 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,23 +1,9 @@ -apply plugin: 'android-library' +apply plugin: 'com.android.library' android { - buildToolsVersion '19.0.0' - compileSdkVersion 19 + compileSdkVersion compile_sdk_version defaultConfig { - minSdkVersion 7 + minSdkVersion min_sdk_version } } - -android.libraryVariants.all { variant -> - def name = variant.buildType.name - if (name.equals(com.android.builder.BuilderConstants.DEBUG)) { - return; // Skip debug builds. - } - def task = project.tasks.create "jar${name.capitalize()}", Jar - task.dependsOn variant.javaCompile - task.from variant.javaCompile.destinationDir - artifacts.add('archives', task); -} - -apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file diff --git a/library/src/main/java/com/readystatesoftware/sqliteasset/SQLiteAssetHelper.java b/library/src/main/java/com/readystatesoftware/sqliteasset/SQLiteAssetHelper.java index ebee1c9..c1c74ca 100755 --- a/library/src/main/java/com/readystatesoftware/sqliteasset/SQLiteAssetHelper.java +++ b/library/src/main/java/com/readystatesoftware/sqliteasset/SQLiteAssetHelper.java @@ -23,31 +23,33 @@ import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; +import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.zip.ZipInputStream; /** - * A helper class to manage database creation and version management using + * A helper class to manage database creation and version management using * an application's raw asset files. - * - * This class provides developers with a simple way to ship their Android app - * with an existing SQLite database (which may be pre-populated with data) and - * to manage its initial creation and any upgrades required with subsequent + *

+ * This class provides developers with a simple way to ship their Android app + * with an existing SQLite database (which may be pre-populated with data) and + * to manage its initial creation and any upgrades required with subsequent * version releases. - * + *

*

This class makes it easy for {@link android.content.ContentProvider} * implementations to defer opening and upgrading the database until first use, * to avoid blocking application startup with long-running database upgrades. - * + *

*

For examples see * https://github.com/jgilfelt/android-sqlite-asset-helper - * + *

*

Note: this class assumes * monotonically increasing version numbers for upgrades. Also, there * is no concept of a database downgrade; installing a new version of @@ -76,20 +78,20 @@ public class SQLiteAssetHelper extends SQLiteOpenHelper { private int mForcedUpgradeVersion = 0; /** - * Create a helper object to create, open, and/or manage a database in + * Create a helper object to create, open, and/or manage a database in * a specified location. * This method always returns very quickly. The database is not actually * created or opened until one of {@link #getWritableDatabase} or * {@link #getReadableDatabase} is called. * - * @param context to use to open or create the database - * @param name of the database file + * @param context to use to open or create the database + * @param name of the database file * @param storageDirectory to store the database file upon creation; caller must - * ensure that the specified absolute path is available and can be written to - * @param factory to use for creating cursor objects, or null for the default - * @param version number of the database (starting at 1); if the database is older, - * SQL file(s) contained within the application assets folder will be used to - * upgrade the database + * ensure that the specified absolute path is available and can be written to + * @param factory to use for creating cursor objects, or null for the default + * @param version number of the database (starting at 1); if the database is older, + * SQL file(s) contained within the application assets folder will be used to + * upgrade the database */ public SQLiteAssetHelper(Context context, String name, String storageDirectory, CursorFactory factory, int version) { super(context, name, factory, version); @@ -112,18 +114,18 @@ public SQLiteAssetHelper(Context context, String name, String storageDirectory, } /** - * Create a helper object to create, open, and/or manage a database in + * Create a helper object to create, open, and/or manage a database in * the application's default private data directory. * This method always returns very quickly. The database is not actually * created or opened until one of {@link #getWritableDatabase} or * {@link #getReadableDatabase} is called. * * @param context to use to open or create the database - * @param name of the database file + * @param name of the database file * @param factory to use for creating cursor objects, or null for the default * @param version number of the database (starting at 1); if the database is older, - * SQL file(s) contained within the application assets folder will be used to - * upgrade the database + * SQL file(s) contained within the application assets folder will be used to + * upgrade the database */ public SQLiteAssetHelper(Context context, String name, CursorFactory factory, int version) { this(context, name, null, factory, version); @@ -133,19 +135,19 @@ public SQLiteAssetHelper(Context context, String name, CursorFactory factory, in * Create and/or open a database that will be used for reading and writing. * The first time this is called, the database will be extracted and copied * from the application's assets folder. - * + *

*

Once opened successfully, the database is cached, so you can * call this method every time you need to write to the database. * (Make sure to call {@link #close} when you no longer need the database.) * Errors such as bad permissions or a full disk may cause this method * to fail, but future attempts may succeed if the problem is fixed.

- * + *

*

Database upgrade may take a long time, you * should not call this method from the application main thread, including * from {@link android.content.ContentProvider#onCreate ContentProvider.onCreate()}. * - * @throws SQLiteException if the database cannot be opened for writing * @return a read/write database object valid until {@link #close} is called + * @throws SQLiteException if the database cannot be opened for writing */ @Override public synchronized SQLiteDatabase getWritableDatabase() { @@ -179,9 +181,11 @@ public synchronized SQLiteDatabase getWritableDatabase() { // do force upgrade if (version != 0 && version < mForcedUpgradeVersion) { + db.close(); db = createOrOpenDatabase(true); - db.setVersion(mNewVersion); version = db.getVersion(); + if (version != mNewVersion) + Log.w(TAG, "Forced Upgrade got " + version + ", now an upgrade to " + mNewVersion + " is required"); } if (version != mNewVersion) { @@ -210,7 +214,10 @@ public synchronized SQLiteDatabase getWritableDatabase() { mIsInitializing = false; if (success) { if (mDatabase != null) { - try { mDatabase.close(); } catch (Exception e) { } + try { + mDatabase.close(); + } catch (Exception e) { + } //mDatabase.unlock(); } mDatabase = db; @@ -230,15 +237,15 @@ public synchronized SQLiteDatabase getWritableDatabase() { * to {@link #getWritableDatabase} may succeed, in which case the read-only * database object will be closed and the read/write object will be returned * in the future. - * + *

*

Like {@link #getWritableDatabase}, this method may * take a long time to return, so you should not call it from the * application main thread, including from * {@link android.content.ContentProvider#onCreate ContentProvider.onCreate()}. * - * @throws SQLiteException if the database cannot be opened * @return a database object valid until {@link #getWritableDatabase} - * or {@link #close} is called. + * or {@link #close} is called. + * @throws SQLiteException if the database cannot be opened */ @Override public synchronized SQLiteDatabase getReadableDatabase() { @@ -288,6 +295,7 @@ public synchronized void close() { mDatabase.close(); mDatabase = null; } + super.close(); } @Override @@ -307,7 +315,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database " + mName + " from version " + oldVersion + " to " + newVersion + "..."); ArrayList paths = new ArrayList(); - getUpgradeFilePaths(oldVersion, newVersion-1, newVersion, paths); + getUpgradeFilePaths(oldVersion, newVersion - 1, newVersion, paths); if (paths.isEmpty()) { Log.e(TAG, "no upgrade script path from " + oldVersion + " to " + newVersion); @@ -349,7 +357,6 @@ public final void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) * * @param version bypass upgrade up to this version number - should never be greater than the * latest database version. - * * @deprecated use {@link #setForcedUpgrade} instead. */ @Deprecated @@ -376,12 +383,21 @@ public void setForcedUpgrade() { setForcedUpgrade(mNewVersion); } + /** + * Returns the full database path. Useful when attaching other databases + * + * @return Full Database Path + */ + public String getDatabasePath() { + return mDatabasePath + "/" + mName; + } + private SQLiteDatabase createOrOpenDatabase(boolean force) throws SQLiteAssetException { // test for the existence of the db file first and don't attempt open // to prevent the error trace in log on API 14+ SQLiteDatabase db = null; - File file = new File (mDatabasePath + "/" + mName); + File file = new File(getDatabasePath()); if (file.exists()) { db = returnDatabase(); } @@ -391,6 +407,7 @@ private SQLiteDatabase createOrOpenDatabase(boolean force) throws SQLiteAssetExc // database already exists if (force) { Log.w(TAG, "forcing database upgrade!"); + db.close(); copyDatabaseFromAssets(); db = returnDatabase(); } @@ -403,9 +420,9 @@ private SQLiteDatabase createOrOpenDatabase(boolean force) throws SQLiteAssetExc } } - private SQLiteDatabase returnDatabase(){ + private SQLiteDatabase returnDatabase() { try { - SQLiteDatabase db = SQLiteDatabase.openDatabase(mDatabasePath + "/" + mName, mFactory, SQLiteDatabase.OPEN_READWRITE); + SQLiteDatabase db = SQLiteDatabase.openDatabase(getDatabasePath(), mFactory, SQLiteDatabase.OPEN_READWRITE); Log.i(TAG, "successfully opened database " + mName); return db; } catch (SQLiteException e) { @@ -418,7 +435,7 @@ private void copyDatabaseFromAssets() throws SQLiteAssetException { Log.w(TAG, "copying database from assets..."); String path = mAssetPath; - String dest = mDatabasePath + "/" + mName; + String dest = getDatabasePath(); InputStream is; boolean isZip = false; @@ -444,15 +461,25 @@ private void copyDatabaseFromAssets() throws SQLiteAssetException { try { File f = new File(mDatabasePath + "/"); - if (!f.exists()) { f.mkdir(); } + if (!f.exists()) { + f.mkdir(); + } if (isZip) { ZipInputStream zis = Utils.getFileFromZip(is); if (zis == null) { throw new SQLiteAssetException("Archive is missing a SQLite database file"); } - Utils.writeExtractedFileToDisk(zis, new FileOutputStream(dest)); + if (path.endsWith(".sql") || path.endsWith(".SQL")) { + createDatabaseFromSqlInputStream(zis, dest); + } else { + Utils.writeExtractedFileToDisk(zis, new FileOutputStream(dest)); + } } else { - Utils.writeExtractedFileToDisk(is, new FileOutputStream(dest)); + if (path.endsWith(".sql") || path.endsWith(".SQL")) { + createDatabaseFromSqlInputStream(is, dest); + } else { + Utils.writeExtractedFileToDisk(is, new FileOutputStream(dest)); + } } Log.w(TAG, "database copy complete"); @@ -464,6 +491,43 @@ private void copyDatabaseFromAssets() throws SQLiteAssetException { } } + /** + * Is used to create the database from a ddl-script ie. if the name ends with '.sql' + * ignores lines starting with '--', if present removes any trailing ';' + * + * @param is stream to read the sql from + * @param destPath the destination file to create the database in + * @throws IOException if reading the input stream caused an error + * @throws SQLiteException if the database could not be created + */ + protected void createDatabaseFromSqlInputStream(InputStream is, String destPath) throws IOException, SQLiteException { + SQLiteDatabase db = null; + try { + db = SQLiteDatabase.openOrCreateDatabase(destPath, mFactory); + db.beginTransaction(); + BufferedReader in = new BufferedReader(new InputStreamReader(is)); + String cmd = in.readLine(); + while (cmd != null) { + cmd = cmd.trim(); + if (cmd.startsWith("--") || cmd.length() == 0) { + continue; + } + if (cmd.charAt(cmd.length() - 1) == ';') { + cmd = cmd.substring(0, cmd.length() - 1); + } + db.execSQL(cmd); + cmd = in.readLine(); + } + db.setTransactionSuccessful(); + } finally { + if (db != null) { + db.endTransaction(); + db.close(); + } + } + } + + private InputStream getUpgradeSQLStream(int oldVersion, int newVersion) { String path = String.format(mUpgradePathFormat, oldVersion, newVersion); try { @@ -506,7 +570,8 @@ private void getUpgradeFilePaths(int baseVersion, int start, int end, ArrayList< @SuppressWarnings("serial") public static class SQLiteAssetException extends SQLiteException { - public SQLiteAssetException() {} + public SQLiteAssetException() { + } public SQLiteAssetException(String error) { super(error); diff --git a/library/src/main/java/com/readystatesoftware/sqliteasset/Utils.java b/library/src/main/java/com/readystatesoftware/sqliteasset/Utils.java index 67cecaf..e8dfc17 100644 --- a/library/src/main/java/com/readystatesoftware/sqliteasset/Utils.java +++ b/library/src/main/java/com/readystatesoftware/sqliteasset/Utils.java @@ -20,9 +20,20 @@ public static List splitSqlScript(String script, char delim) { StringBuilder sb = new StringBuilder(); boolean inLiteral = false; char[] content = script.toCharArray(); + int openDelimiter = -1, lastCharacter = -1; + for (int i = 0; i < script.length(); i++) { - if (content[i] == '"') { - inLiteral = !inLiteral; + if (content[i] == '"' || content[i] == '\'') { + if (openDelimiter == -1) { + // We were not inside a literal; store the delimiter's value. + openDelimiter = content[i]; + inLiteral = true; + } else if (openDelimiter == content[i] && lastCharacter != '\\') { + // We exit from the literal only on the same character + // AND unless we're being escaped by a backslash. + inLiteral = false; + openDelimiter = -1; + } } if (content[i] == delim && !inLiteral) { if (sb.length() > 0) { @@ -32,6 +43,12 @@ public static List splitSqlScript(String script, char delim) { } else { sb.append(content[i]); } + if (lastCharacter == '\\' && content[i] == '\\') { + // It was an escaped backslash, don't accumulate. + lastCharacter = -1; + } else { + lastCharacter = content[i]; + } } if (sb.length() > 0) { statements.add(sb.toString().trim()); @@ -39,10 +56,11 @@ public static List splitSqlScript(String script, char delim) { return statements; } - public static void writeExtractedFileToDisk(InputStream in, OutputStream outs) throws IOException { + public static void writeExtractedFileToDisk(InputStream in, OutputStream outs) throws + IOException { byte[] buffer = new byte[1024]; int length; - while ((length = in.read(buffer))>0){ + while ((length = in.read(buffer)) > 0) { outs.write(buffer, 0, length); } outs.flush(); @@ -61,7 +79,9 @@ public static ZipInputStream getFileFromZip(InputStream zipFileStream) throws IO } public static String convertStreamToString(InputStream is) { - return new Scanner(is).useDelimiter("\\A").next(); + try (Scanner scanner = new Scanner(is)) { + return scanner.useDelimiter("\\A").next(); + } } } diff --git a/samples/database-v1/build.gradle b/samples/database-v1/build.gradle index 708c923..54be324 100644 --- a/samples/database-v1/build.gradle +++ b/samples/database-v1/build.gradle @@ -1,17 +1,15 @@ -apply plugin: 'android' +apply plugin: 'com.android.application' dependencies { - compile project(':library') + implementation project(':library') } android { - buildToolsVersion '19.0.0' - compileSdkVersion 19 + compileSdkVersion compile_sdk_version defaultConfig { - minSdkVersion 8 - packageName 'com.example.sqliteassethelper' - targetSdkVersion 19 + minSdkVersion min_sdk_version + targetSdkVersion target_sdk_version versionCode 1 versionName '1.0' } diff --git a/samples/database-v13-upgrade/build.gradle b/samples/database-v13-upgrade/build.gradle index 131d755..3617d4e 100644 --- a/samples/database-v13-upgrade/build.gradle +++ b/samples/database-v13-upgrade/build.gradle @@ -1,35 +1,36 @@ buildscript { repositories { mavenCentral() + google() } dependencies { - classpath 'com.android.tools.build:gradle:0.7.+' + classpath "com.android.tools.build:gradle:$build_tools_version" } } -apply plugin: 'android' +apply plugin: 'com.android.application' repositories { mavenCentral() + google() } android { - compileSdkVersion 19 - buildToolsVersion "19.0.0" + compileSdkVersion compile_sdk_version defaultConfig { - minSdkVersion 8 - targetSdkVersion 19 + minSdkVersion min_sdk_version + targetSdkVersion target_sdk_version versionCode 3 versionName "3.0" } buildTypes { release { - runProguard false + minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { - compile project(':library') + implementation project(':library') } diff --git a/samples/database-v2-upgrade/build.gradle b/samples/database-v2-upgrade/build.gradle index 2be5d87..557bf0c 100644 --- a/samples/database-v2-upgrade/build.gradle +++ b/samples/database-v2-upgrade/build.gradle @@ -1,17 +1,15 @@ -apply plugin: 'android' +apply plugin: 'com.android.application' dependencies { - compile project(':library') + implementation project(':library') } android { - buildToolsVersion '19.0.0' - compileSdkVersion 19 + compileSdkVersion compile_sdk_version defaultConfig { - minSdkVersion 8 - packageName 'com.example.sqliteassethelper' - targetSdkVersion 19 + minSdkVersion min_sdk_version + targetSdkVersion target_sdk_version versionCode 2 versionName '2.0' }