Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create properties file using gradle

I would like to create a properties file named "dev.properties" using gradle. Here is my build.gradle code:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.8.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 16
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 16
    }

    def prop = new Properties()
    def propFile = new File("dev.properties");
    propFile.createNewFile();
    prop.store(propFile.newWriter(), null);

    buildTypes {
        release {
            runProguard false
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }
}

The file is created when I right click on the build.gradle and choose run. However it's not created when I make the entire project. How come?

I'm using android studio 0.4.6 with gradle 1.10.

like image 961
Robert Avatar asked Feb 28 '14 23:02

Robert


People also ask

How do I create a Gradle properties file in Intellij?

In the Project tool window, right-click the project and from the context menu, select New | File. In the New File dialog, enter gradle. properties as a filename and click OK. Open the created file in the editor and add the VM options you need.

Is Gradle properties a text file?

Defining properties using an external file We can also set the properties for our project in an external file. The file needs to be named gradle. properties , and it should be a plain text file with the name of the property and its value on separate lines.


1 Answers

It's creating the file, just not where you expect. Your script is creating the file inside the current working directory, and in Android Studio, that will be in Android Studio's distribution. There's a bug filed to make Android Studio consistent with the command line (https://code.google.com/p/android/issues/detail?id=65552) and put the working directory at the project root (well, that's assuming your working directory is set there when you issue Gradle commands), but the fix is actually difficult, and the real answer is you should probably never implicitly rely on the working directory, so that you can make your builds as bulletproof as possible.

If you do something like this:

def propFile = new File("${project.rootDir}/dev.properties")

it will put the file in your project's root directory. There's also project.projectDir, which will be your module directory; see http://www.gradle.org/docs/current/dsl/org.gradle.api.Project.html for more details on what's available to you.

As a side note, you should keep in mind this will run every time the build file is evaluated (because the android block is executed every time the build script is run), which could be more often than you want. It's more than just build time; it's project import time as well, and any time Android Studio decides to evaluate the build file, which happens when you open the project and also when you click the Sync Project with Gradle Files button.

Additionally, you should consider at what phase of the build process you want it to happen: is it script evaluation time, or do you want it to run after Gradle has done its analysis and is ready to actually start building things? You can read http://www.gradle.org/docs/current/userguide/build_lifecycle.html to find out more about that.

Sorry, I know it's a lot of information to drop on you when you're just trying to get something going, but those concepts will help you out pretty soon down the road.

like image 143
Scott Barta Avatar answered Sep 21 '22 06:09

Scott Barta