Fabrizio Russo Autoincrementare il numero di build


2017/01/13   Autoincrementare il numero di build

Se รจ necessario essere sicuri che ad ogni build venga generato un nuovo numero di build (numero incrementale), e' possibile inserire questo codide all'interno dello script gradle della propria applicazione android.

Lo scrip va inserito dopo la sezione 'android' e prima della sezione 'dependencis' del file build.gradle relativo all'app (non al progetto).


String buildFilePath = "app/src/main/assets/build.prop";
File buildFile = new File(buildFilePath);
if (!buildFile.getParentFile().exists()) buildFile.getParentFile().mkdirs();

int buildNumber = 0;
Properties buildProp = new Properties();
try {
    buildProp.load(new FileInputStream(buildFilePath))
    buildNumber = Integer.parseInt(buildProp.getProperty("buildNumber"));
    buildNumber++;
} catch (Exception e) {
}
buildProp.setProperty("buildNumber", "" + buildNumber);
buildProp.setProperty("buildTimeStamp", "" + System.currentTimeMillis());
buildProp.setProperty("betaVersion", "true");
buildProp.setProperty("expirationDate", "" + (System.currentTimeMillis() + 90 * 3600000 * 24));

buildProp.save(new FileOutputStream(buildFilePath), "");


Questo fara' si che ad ogni lancio di build lo script leggera' il file build.properties direttamente dalla cartella assets del progetto (se la prima volta non c'e' provvede a crearla).
La cartella assets (contrariamente alla cartella res) non viene compilata, quindi i files vengono lasciati inalterati dalle fasi successive di composizione dell' APK da parte del plugin gradle.

Successivamente, per poter leggere tale proprieta' all'interno dell'applicazione a run-time, e' sufficiente modificare la propria Application class in questo modo:


public class MyApplication extends android.app.Application {

	public static Properties buildProperties = null;
	@Override
	public void onCreate() {
	    super.onCreate();
	    // Add your code here, if you want
	    
	    try {
	        InputStream buildIS = getAssets().open("build.prop");
	        buildProperties = new Properties();
	        buildProperties.load(buildIS);
	        buildIS.close();
	    } catch (IOException e) {
	        Helper.error("Error loading build.prop", e);
	    }
	}

	// ....
}

In questo modo, allo start-up dell'applicazione l'intera properties viene memorizzata e conservata all'interno della classe Application in modo da poter essere acceduta velocemente da qualsiasi punto.