diff --git a/TestKeystore.jks b/TestKeystore.jks new file mode 100644 index 000000000..83f0bc0e6 Binary files /dev/null and b/TestKeystore.jks differ diff --git a/app/build.gradle b/app/build.gradle index 2a5e4fd2c..41f43d75c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,7 +22,7 @@ android { buildTypes { release { - minifyEnabled false + minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } debug { diff --git a/app/proguard-rules.txt b/app/proguard-rules.txt index 363b143b7..f30a55588 100644 --- a/app/proguard-rules.txt +++ b/app/proguard-rules.txt @@ -1,3 +1,43 @@ --dontwarn java.beans.** --dontwarn java.lang.** --dontobfuscate \ No newline at end of file +-dontwarn java.** +-dontwarn javax.** +-dontwarn com.google.auto.** +-dontwarn com.google.errorprone.annotations.** +-dontwarn com.google.j2objc.annotations.** +-dontwarn okio.** +-dontwarn okhttp3.** +-dontwarn sun.misc.** +-dontwarn org.codehaus.mojo.** +-dontwarn com.google.gson.internal.* +-dontwarn com.google.common.util.concurrent.* +-dontwarn com.google.auto.common.* +-dontwarn org.apache.commons.beanutils.* +-dontwarn org.isoron.uhabits.HabitsApplication + +-dontobfuscate + +-keep class sun.misc.Unsafe { *; } +-keep class org.isoron.** { *; } + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.preference.Preference +-keep public class * extends android.view.View { + public (android.content.Context); + public (android.content.Context, android.util.AttributeSet); + public (android.content.Context, android.util.AttributeSet, int); +} +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} +-keepclassmembers class * extends android.content.Context { + public void *(android.view.View); + public void *(android.view.MenuItem); +} +-keep public class * extends android.app.Activity +-dontskipnonpubliclibraryclassmembers \ No newline at end of file diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml deleted file mode 100644 index be52ed256..000000000 --- a/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - diff --git a/run_tests b/run_tests index 315d942cc..63042b5a1 100755 --- a/run_tests +++ b/run_tests @@ -19,12 +19,18 @@ fi AVD_NAME=$1 AVD_SERIAL=$2 + ADB="${ANDROID_HOME}/platform-tools/adb -s emulator-${AVD_SERIAL}" EMULATOR="${ANDROID_HOME}/tools/emulator" -GRADLE="./gradlew --no-daemon --stacktrace" +GRADLE="./gradlew --stacktrace" PACKAGE_NAME=org.isoron.uhabits OUTPUTS_DIR=app/build/outputs +KEYFILE="TestKeystore.jks" +KEY_ALIAS="default" +KEY_PASSWORD="qwe123" +STORE_PASSWORD="qwe123" + info() { if [ ! -z "$TEAMCITY_VERSION" ]; then echo "###teamcity[progressMessage '$1']" @@ -35,8 +41,12 @@ info() { fi } -fail() { +cleanup() { $ADB emu kill + $GRADLE --stop +} + +fail() { exit 1 } @@ -56,24 +66,36 @@ rm -rf ${OUTPUTS_DIR} mkdir -p ${OUTPUTS_DIR} #-------------------------------------------------------------------------------- -info "Building instrumentation APKs" -$GRADLE assembleDebug assembleAndroidTest || fail +info "Building release APK" +./gradlew assembleRelease \ + -Pandroid.injected.signing.store.file=$KEYFILE \ + -Pandroid.injected.signing.store.password=$STORE_PASSWORD \ + -Pandroid.injected.signing.key.alias=$KEY_ALIAS \ + -Pandroid.injected.signing.key.password=$KEY_PASSWORD || fail #-------------------------------------------------------------------------------- -info "Installing APKs" -$ADB install -r ${OUTPUTS_DIR}/apk/app-debug.apk || fail -$ADB install -r ${OUTPUTS_DIR}/apk/app-debug-androidTest.apk || fail +info "Building instrumentation APK" +$GRADLE assembleAndroidTest \ + -Pandroid.injected.signing.store.file=$KEYFILE \ + -Pandroid.injected.signing.store.password=$STORE_PASSWORD \ + -Pandroid.injected.signing.key.alias=$KEY_ALIAS \ + -Pandroid.injected.signing.key.password=$KEY_PASSWORD || fail #-------------------------------------------------------------------------------- -info "Granting permissions" -$ADB shell pm grant org.isoron.uhabits android.permission.SET_ANIMATION_SCALE || fail +info "Installing APKs" +$ADB uninstall ${PACKAGE_NAME} +$ADB install -r ${OUTPUTS_DIR}/apk/app-release.apk || fail +$ADB install -r ${OUTPUTS_DIR}/apk/app-debug-androidTest.apk || fail #-------------------------------------------------------------------------------- info "Running instrumentation tests" -$ADB shell am instrument -r -e coverage true -e size medium \ +$ADB shell am instrument \ + -r -e coverage true -e size medium \ -w ${PACKAGE_NAME}.test/android.support.test.runner.AndroidJUnitRunner \ > ${OUTPUTS_DIR}/instrument.txt +#-------------------------------------------------------------------------------- +info "Parsing test results" java -jar tools/automator-log-converter-1.5.0.jar ${OUTPUTS_DIR}/instrument.txt || fail #-------------------------------------------------------------------------------- @@ -103,7 +125,7 @@ info "Uninstalling test APK" $ADB uninstall ${PACKAGE_NAME}.test || fail #-------------------------------------------------------------------------------- -info "Stopping emulator" -$ADB emu kill +info "Stopping emulator and cleaning up" +cleanup exit $failed