From 4a11968692f47413fe3b97e307a8da46b78b13ef Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 24 Jul 2015 15:01:34 -0400 Subject: [PATCH 1/3] #658 adding an example for BuildConfig injection --- src/site/asciidoc/examples.adoc | 5 + .../projects/buildConfigInjection/README.txt | 6 + .../projects/buildConfigInjection/pom.xml | 138 ++++++++++++++++++ .../src/main/AndroidManifest.xml | 16 ++ .../HelloFlashlight.java | 81 ++++++++++ .../src/main/res/drawable-hdpi/icon.png | Bin 0 -> 4147 bytes .../src/main/res/drawable-ldpi/icon.png | Bin 0 -> 1723 bytes .../src/main/res/drawable-mdpi/icon.png | Bin 0 -> 2574 bytes .../src/main/res/layout/main.xml | 32 ++++ .../src/main/res/values/strings.xml | 9 ++ 10 files changed, 287 insertions(+) create mode 100644 src/test/projects/buildConfigInjection/README.txt create mode 100644 src/test/projects/buildConfigInjection/pom.xml create mode 100644 src/test/projects/buildConfigInjection/src/main/AndroidManifest.xml create mode 100644 src/test/projects/buildConfigInjection/src/main/java/com/simpligility/android/helloflashlightinjection/HelloFlashlight.java create mode 100644 src/test/projects/buildConfigInjection/src/main/res/drawable-hdpi/icon.png create mode 100644 src/test/projects/buildConfigInjection/src/main/res/drawable-ldpi/icon.png create mode 100644 src/test/projects/buildConfigInjection/src/main/res/drawable-mdpi/icon.png create mode 100644 src/test/projects/buildConfigInjection/src/main/res/layout/main.xml create mode 100644 src/test/projects/buildConfigInjection/src/main/res/values/strings.xml diff --git a/src/site/asciidoc/examples.adoc b/src/site/asciidoc/examples.adoc index 6ee2bb543..361032682 100644 --- a/src/site/asciidoc/examples.adoc +++ b/src/site/asciidoc/examples.adoc @@ -11,6 +11,11 @@ The are also built as part of the integration tests and the tests that run those Located in the +helloflashlight+ folder. A flashlight application as an example for a simple Android application build. +== BuildConfigInjection + +Located in the +buildConfigInjection+ folder. Based on the flashlight +application, this shows you how to inject information into the BuildConfig class. Useful for versioning and build tracking. + == MorseFlash Located in the +morseflash+ folder. A multi-module application with a diff --git a/src/test/projects/buildConfigInjection/README.txt b/src/test/projects/buildConfigInjection/README.txt new file mode 100644 index 000000000..14a229062 --- /dev/null +++ b/src/test/projects/buildConfigInjection/README.txt @@ -0,0 +1,6 @@ +Based on the Hello Flash Light app, this project shows you how to inject custom variables into the Android BuildConfig class, enabling you to do some nifty things in terms of tracking stuff like + - what branch was this build made on? + - when was this build made? + + +Basically any maven parameter can be injected. Since a lot of people use git, this project includes uses some other open source maven plugins (that are in central) to inject the current time stamp, username and git information into BuildConfig.java. diff --git a/src/test/projects/buildConfigInjection/pom.xml b/src/test/projects/buildConfigInjection/pom.xml new file mode 100644 index 000000000..1d0dc9273 --- /dev/null +++ b/src/test/projects/buildConfigInjection/pom.xml @@ -0,0 +1,138 @@ + + + 4.0.0 + + com.simpligility.android + dependencyInjection + 1.0.0 + apk + + HelloFlashLight with Injection + + + 4.3.0 + + + + com.google.android + android + 4.1.1.4 + provided + + + + + + + + com.simpligility.maven.plugins + + android-maven-plugin + ${it-plugin.version} + true + + + + + + + com.keyboardsamurais.maven + maven-timestamp-plugin + 1.0 + + timestamp + yyyy.MM.dd HH:mm + + + + + create + + + + + + + ru.concerteza.buildnumber + maven-jgit-buildnumber-plugin + 1.2.9 + + + git-buildnumber + + extract-buildnumber + + + validate + + + + + com.simpligility.maven.plugins + + android-maven-plugin + + + 19 + + + + + Title + ${project.name} + String + + + Version + ${project.version} + String + + + Vendor + ${project.organization.name} + String + + + ArtifactId + ${project.groupId}.${project.artifactId} + String + + + + GitRevision + ${git.revision} + String + + + GitBranch + ${git.branch} + String + + + + GitTag + ${git.tag} + String + + + + GitCommitCount + ${git.commitsCount} + String + + + BuiltOn + ${timestamp} + String + + + BuiltBy + ${user.name} + String + + + + + + + diff --git a/src/test/projects/buildConfigInjection/src/main/AndroidManifest.xml b/src/test/projects/buildConfigInjection/src/main/AndroidManifest.xml new file mode 100644 index 000000000..18a489606 --- /dev/null +++ b/src/test/projects/buildConfigInjection/src/main/AndroidManifest.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/src/test/projects/buildConfigInjection/src/main/java/com/simpligility/android/helloflashlightinjection/HelloFlashlight.java b/src/test/projects/buildConfigInjection/src/main/java/com/simpligility/android/helloflashlightinjection/HelloFlashlight.java new file mode 100644 index 000000000..9bddf40a3 --- /dev/null +++ b/src/test/projects/buildConfigInjection/src/main/java/com/simpligility/android/helloflashlightinjection/HelloFlashlight.java @@ -0,0 +1,81 @@ +package com.simpligility.android.helloflashlightinjection; + +import android.app.Activity; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.TableLayout; +import android.widget.TextView; + +import com.simpligility.android.helloflashlightinjection.BuildConfig; +import com.simpligility.android.helloflashlightinjection.R; + +/** + * HelloFlashlight is a sample application for the usage of the Maven Android Plugin. + * The code is trivial and not the focus of this example and therefore not really documented. + * + * @author Manfred Moser + */ +public class HelloFlashlight extends Activity { + + TableLayout table; + Button redButton; + Button greenButton; + Button blueButton; + Button blackButton; + Button whiteButton; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + + // get all the view components + table = (TableLayout) findViewById(R.id.Table); + redButton = (Button) findViewById(R.id.ButtonRed); + greenButton = (Button) findViewById(R.id.ButtonGreen); + blueButton = (Button) findViewById(R.id.ButtonBlue); + blackButton = (Button) findViewById(R.id.ButtonBlack); + whiteButton = (Button) findViewById(R.id.ButtonWhite); + + // default the full screen to white + table.setBackgroundColor(Color.WHITE); + + // hook up all the buttons with a table color change on click listener + redButton.setOnClickListener(OnClickChangeColor(Color.RED)); + greenButton.setOnClickListener(OnClickChangeColor(Color.GREEN)); + blueButton.setOnClickListener(OnClickChangeColor(Color.BLUE)); + blackButton.setOnClickListener(OnClickChangeColor(Color.BLACK)); + whiteButton.setOnClickListener(OnClickChangeColor(Color.WHITE)); + + TextView tv = (TextView)findViewById(R.id.buildInfo); + StringBuilder sb = new StringBuilder(); + sb.append("ArtifactId:\n" + BuildConfig.ArtifactId + "\n"); + sb.append("Build on:\n" + BuildConfig.BuiltOn + "\n"); + sb.append("Built by:\n" + BuildConfig.BuiltBy + "\n"); + sb.append("Branch:\n" + BuildConfig.GitBranch + "\n"); + sb.append("Commits:\n" + BuildConfig.GitCommitCount + "\n"); + sb.append("Revision:\n" + BuildConfig.GitRevision + "\n"); + sb.append("Tag:\n" + BuildConfig.GitTag + "\n"); + sb.append("Title:\n" + BuildConfig.Title + "\n"); + sb.append("Vendor:\n" + BuildConfig.Vendor + "\n"); + sb.append("Version:\n" + BuildConfig.Version + "\n"); + + tv.setText(sb.toString()); + } + + /** + * An OnClickListener that changes the color of the table. + * @param color + * @return + */ + View.OnClickListener OnClickChangeColor(final int color) + { + return new View.OnClickListener() { + public void onClick(View view) { + table.setBackgroundColor(color); + } + }; + } +} diff --git a/src/test/projects/buildConfigInjection/src/main/res/drawable-hdpi/icon.png b/src/test/projects/buildConfigInjection/src/main/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8074c4c571b8cd19e27f4ee5545df367420686d7 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/src/test/projects/buildConfigInjection/src/main/res/drawable-ldpi/icon.png b/src/test/projects/buildConfigInjection/src/main/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1095584ec21f71cd0afc9e0993aa2209671b590c GIT binary patch literal 1723 zcmV;s21NOZP)AReP91Tc8>~sHP8V>Ys(CF=aT`Sk=;|pS}XrJPb~T1dys{sdO&0YpQBSz*~us zcN*3-J_EnE1cxrXiq*F~jZje~rkAe3vf3>;eR)3?Ox=jK*jEU7Do|T`2NqP{56w(* zBAf)rvPB_7rsfeKd0^!CaR%BHUC$tsP9m8a!i@4&TxxzagzsYHJvblx4rRUu#0Jlz zclZJwdC}7S3BvwaIMTiwb!98zRf|zoya>NudJkDGgEYs=q*HmC)>GExofw=92}s;l z_YgKLUT5`<1RBwq{f)K~I%M=gRE6d)b5BP`8{u9x0-wsG%H)w^ zRU7n9FwtlfsZSjiSB(k8~Y5+O>dyoSI477Ly?|FR?m))C!ci%BtY!2Sst8Uri#|SFX&)8{_Ou2 z9r5p3Vz9_GY#%D>%huqp_>U}K45YGy__TE!HZA@bMxX~@{;>cGYRgH~Ih*vd7EgV7h6Pg$#$lH+5=^lj{W80p{{l+;{7_t5cv3xVUy zl_BY4ht1JH*EEeRS{VwTC(QFIVu8zF&P8O$gJsMgsSO35SVvBrX`Vah$Yz2-5T>-`4DJNH;N zlSSY8-mfty+|1~*;BtTwLz_w5 z+lRv)J28~G%ouyvca(@|{2->WsPii&79&nju7ITE6hMX4AQc{|KqZN#)aAvemg3IZ zCr}Y+!r}JU&^>U1C2WyZC<=47itSYQ`?$5{VH?mtFMFFExfYTsfqK%*WzH@Onc#i` zI@a|rm-WbKk{5my{mF}H>Duc$bit&yLAgFfqo2vVbm~?FeG#0F?dSP*kxSo0Ff!o@ z(C}B;r&6pa-NY4;y~5lX8g&*MYQ>yLGd^tDWC4(sGy$Ow-*!eh%xt;>ve|J1q$*w< zh;B#cz!6l2=5bkX#nJ9PJQ`ew8t>7z$bxqf*QB=l2_UB$hK|1EIfloN-jQ=qcwChF zYAkkyp=;FwcnUB3v0=*tMYMA(HdyQ`Og{P|8RRXpj5bgrSmEzSMfBn+{{vpNxw?;5UX;iv9sYxy_`IQHs$i<61a_iv^L>h8s-`D(`e@|IgS*Fj zNGM876Gf;3D8*1UX9a%v>yJKD*QkCwW2AirU(L{qNA)JghmGItc;(H<$!ABY&gBy1vJIEUj-b8%el*o|VkG)LqNx#TG>Jvj^jIte!!+RY z)T4j$7+PoF1AkRBf}R#^T=-q|PaK1$c<4UH)Hpq3$4WA|xtr!ZQLC=*vNE>O6E9kp+5X0eKB$6>C(lPwI@3#oY zhS_%x7e|j!$yG?ECXmh~EH~^OeuK}+sWoJse3Z3?ha3n`MM9KvA?uqpEnBg4Q46)7 zM$p%a$@l;+O}vfvx%XjH`}a{(-HHth9!JaUwV0*VqGR48^gWNYN<&~7x)y$e!X>e` zZ5!6KZoxbKuV9XUDI%#M1~IVh?pNSdeb~6@$y`v|yk=XK+fHxnDqnUK4&=QRNyIVf zYbDM*cI>~qIy*a7=z7uqkw@agd(<=y-Q7L!ty_23SGdXmahO<;N=wB+j;lNm%=OHC zy zU|>La6h%92y4IPufI$9>Xu!@y`TaNgtg&41@PwMwBdmSm7)xAWDLoqjZ==P2#*k7! z3o1)cVSI3KP_!?d8G^Lg0FtLXC~JYdxi|c%h~lXEixY=%VSFF@!*3&&9>(Rb|iK54Cx5;s~PY5iaV1het%w`dgQFBAJ;aFK zImQC}(|QaCFYUm1JVfzSc)ebv=)ObI)0jwJb``}Zj9J0n0Xgn*Zc(rFM9$xh_makZbm-at_v5^SW zM1y1SW@%+FuIy*WR)i3A2N_q;(YO`O!A|Ts^%z}9ZepCj3ytlw#x%N_fNrKKtPh`< z|1{UqF`4LxHaCQ79+E=uUXCOZ35jAMRz%R%0(P!0FMv=sk>Nr8%+OzY^c-M9@+fz=G`qa@v4sF5u-2289-#$**LWnyNNDwDf1( zkUiMnw|y$tn>pQP=Vn!#|17L^5AGrjtBkN$D@v)Z7LXc5EFhLB4<;7Wehh)CMqX|W zqsiZaO^benJ_hwa&V0ub$-_HUk**?g6fm9|!@kguU6*zhK)$qn-<3*kFrYPIaqR=V zUaUvk>@F_89b@tHs8R!*QKY;INJ<2_U+K6Ca3e9Gsl2{qY0%a7J?uICWgHuLfj+MB z=GkAN1&ifT#2u}B+2S#~$5jA(Qn^;H%CCmIae4AE-Dsng|Hl*Ov!z72k3ZnJs{pp| z+pW`DDueC#mEWOf=ucJ!dTL}hzOeiS-i?m2E;`EKz4<&Lu~NnW?peqVU^@<+T3KKu z{yrI%Qy-Z%HEvLUz}n^~m?7x`xuCtNR#L2En!T>dQtIKdS#V-Hzt3RtwTeYtmQ&dR z6qXZvac*oc@BUYEH%@Ylv_1&tSjkbzzU6*h1(3^C`;1z;g_SmOtclS?KWk2VYE zM*oS<=C483XckW?GN|1jfh3Ro(h + + + +