Build system improvements
1. Sign the release apk if configured to do it By default the build will not sign the release apk, but if you define the right properties it will. Create a ~/.gradle/gradle.properties file with these properties: releaseKeystoreFile, releaseKeystorePassword, releaseKeyAlias, and releaseKeyPassword. For example: releaseKeystoreFile=/Users/tcabot/release-keystore releaseKeystorePassword=k3yst0r3 releaseKeyAlias=affdexme releaseKeyPassword=k3y 2. Allow debug builds to coexist with releases The debug build has a different id (com.affectiva.affdexme.debug) so android treats it as a completely different app. By default, though, both apps look the same on the app launch screen so the debug version is now called AffdexMeDbg so you can have both at the same time and be able to tell which is which. 3. Make the apk filename more descriptive It was just "app-debug.apk" or "app-release.apk". This commit changes the "app" to "AffdexMe" and adds the human-readable versionName and integer versionCode to the filename. I would have liked the filename to track the cosmetic name (i.e., have the debug file be called "AffdexMeDbg-....apk") but that turned out to be surprisingly difficult given the way the build system is set up. I think it should be possible but this is the best bang for the buck for the amount of effort I'm willing to put in at this point.
This commit is contained in:
parent
9428e74d2b
commit
f542f7c519
3 changed files with 90 additions and 29 deletions
|
@ -10,9 +10,15 @@ android {
|
|||
targetSdkVersion 22
|
||||
versionCode 14
|
||||
versionName "2.0.0"
|
||||
setProperty("archivesBaseName", "AffdexMe-$versionName-$versionCode")
|
||||
}
|
||||
buildTypes {
|
||||
debug {
|
||||
resValue 'string', 'app_name', 'AffdexMeDbg'
|
||||
applicationIdSuffix ".debug"
|
||||
}
|
||||
release {
|
||||
resValue 'string', 'app_name', 'AffdexMe'
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
|
@ -42,3 +48,18 @@ dependencies {
|
|||
//compile 'com.google.android.gms:play-services:7.5.0'
|
||||
|
||||
}
|
||||
|
||||
// build a signed release apk only if the environment is configured
|
||||
// with the properties that let us access the keystore. you can put
|
||||
// them into ~/.gradle/gradle.properties
|
||||
if (project.hasProperty('releaseKeystoreFile')) {
|
||||
android.signingConfigs {
|
||||
release {
|
||||
storeFile file(releaseKeystoreFile)
|
||||
storePassword releaseKeystorePassword
|
||||
keyAlias releaseKeyAlias
|
||||
keyPassword releaseKeyPassword
|
||||
}
|
||||
}
|
||||
android.buildTypes.release.signingConfig = android.signingConfigs.release
|
||||
}
|
||||
|
|
96
app/proguard-rules.pro
vendored
96
app/proguard-rules.pro
vendored
|
@ -1,16 +1,58 @@
|
|||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in /Users/AlanCasalas/Library/Android/sdk/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
# This is a configuration file for ProGuard.
|
||||
# http://proguard.sourceforge.net/index.html#manual/usage.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
-dontskipnonpubliclibraryclasses
|
||||
|
||||
#prevent proguard from warning us about not including the GooglePlay dependency
|
||||
-dontwarn **
|
||||
# Optimization is turned off by default. Dex does not like code run
|
||||
# through the ProGuard optimize and preverify steps (and performs some
|
||||
# of these optimizations on its own).
|
||||
-dontoptimize
|
||||
-dontpreverify
|
||||
# Note that if you want to enable optimization, you cannot just
|
||||
# include optimization flags in your own project configuration file;
|
||||
# instead you will need to point to the
|
||||
# "proguard-android-optimize.txt" file instead of this one from your
|
||||
# project.properties file.
|
||||
|
||||
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
|
||||
-keep public class com.google.vending.licensing.ILicensingService
|
||||
-keep public class com.android.vending.licensing.ILicensingService
|
||||
|
||||
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
|
||||
-keepclasseswithmembernames class * {
|
||||
native <methods>;
|
||||
}
|
||||
|
||||
# keep setters in Views so that animations can still work.
|
||||
# see http://proguard.sourceforge.net/manual/examples.html#beans
|
||||
-keepclassmembers public class * extends android.view.View {
|
||||
void set*(***);
|
||||
*** get*();
|
||||
}
|
||||
|
||||
# We want to keep methods in Activity that could be used in the XML attribute onClick
|
||||
-keepclassmembers class * extends android.app.Activity {
|
||||
public void *(android.view.View);
|
||||
}
|
||||
|
||||
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
|
||||
-keepclassmembers enum * {
|
||||
public static **[] values();
|
||||
public static ** valueOf(java.lang.String);
|
||||
}
|
||||
|
||||
-keep class * implements android.os.Parcelable {
|
||||
public static final android.os.Parcelable$Creator *;
|
||||
}
|
||||
|
||||
-keepclassmembers class **.R$* {
|
||||
public static <fields>;
|
||||
}
|
||||
|
||||
# The support library contains references to newer platform versions.
|
||||
# Don't warn about those in case this app is linking against an older
|
||||
# platform version. We know about them, and they are safe.
|
||||
-dontwarn android.support.**
|
||||
|
||||
#keep all classes (otherwise Proguard may remove classes that use reflection, injection, Gson, etc...)
|
||||
-keep class sun.**
|
||||
|
@ -22,22 +64,22 @@
|
|||
-keep class javax.**
|
||||
-keepclassmembers class javax.** {*;}
|
||||
|
||||
|
||||
#keep certain class members (otherwise Proguard would strip the members of these classes)
|
||||
-keep class com.**
|
||||
-keepclassmembers class com.affectiva.android.affdex.sdk.detector.A* { *; }
|
||||
-keepclassmembers class com.affectiva.android.affdex.sdk.detector.B* { *; }
|
||||
-keepclassmembers class com.affectiva.android.affdex.sdk.detector.I* { *; }
|
||||
-keepclassmembers class com.affectiva.android.affdex.sdk.detector.L* { *; }
|
||||
-keepclassmembers class com.affectiva.android.affdex.sdk.Frame { *; }
|
||||
-keepclassmembers class !com.affectiva.affdexme.MainActivity,!com.affectiva.android.affdex.sdk.detector.Detector {*;}
|
||||
-keepclassmembers class com.affectiva.android.affdex.sdk.detector.Detector {
|
||||
public void setDetect**;
|
||||
}
|
||||
|
||||
|
||||
-keepclassmembers class com.affectiva.affdexme.DrawingView {*;}
|
||||
-keepclassmembers class com.affectiva.affdexme.MetricView {*;}
|
||||
-keepclassmembers class com.affectiva.affdexme.GradientMetricView {*;}
|
||||
|
||||
-keepclassmembers class * {
|
||||
@javax.inject.* *;
|
||||
@dagger.* *;
|
||||
<init>();
|
||||
}
|
||||
# Dagger
|
||||
-dontwarn dagger.internal.codegen.**
|
||||
-keepclassmembers,allowobfuscation class * {
|
||||
@javax.inject.* *;
|
||||
@dagger.* *;
|
||||
<init>();
|
||||
}
|
||||
-keep class dagger.* { *; }
|
||||
-keep class javax.inject.* { *; }
|
||||
-keep class * extends dagger.internal.Binding
|
||||
-keep class * extends dagger.internal.ModuleAdapter
|
||||
-keep class * extends dagger.internal.StaticInjection
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
<resources>
|
||||
<string name="app_name">AffdexMe</string>
|
||||
|
||||
<!--MainActivity strings-->
|
||||
<string name="not_found">Sorry, AffdexMe requires the use of a front-facing camera, which was not found on your device.</string>
|
||||
<string name="affectiva_logo_content_description">Affectiva Logo</string>
|
||||
|
|
Loading…
Reference in a new issue