10

I want to add custom fields in local.properties like

debug.username=test123 debug.password=abcd1234 

can add .properties files in assets folder and read that easily.

Resources resources = context.getResources(); AssetManager assetManager = resources.getAssets(); Properties properties = null; InputStream inputStream = assetManager.open(fileName); properties = new Properties(); properties.load(inputStream); 

But don't want to do this. As i want every team member of our to use local.properties to specify there custom attribute. which is not the part of version control system.

So how to read local.properties placed in the root folder of gradle based android project in java files at runtime?

3 Answers 3

17

I know that this is an old question but I recently encountered the same thing and I thought I'd share my solution:

  1. Set the value in your local.properties file.
  2. Read the value in your Gradle build script and set it to a BuildConfig constant.
  3. Access the BuildConfig constant in your Java code.

local.properties

username=myUsername 

build.gradle:

def getUsername() { Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) return properties.getProperty("username"); } android { defaultConfig { buildConfigField "String", "USERNAME", "\""+getUsername()+"\"" } } 

Example Java class:

package your.package.name; class MyClass { String getUsername() { return BuildConfig.USERNAME; // Will return "myUsername" } } 
Sign up to request clarification or add additional context in comments.

1 Comment

@Kat can you be more specific? You should be able to move the buildConfigField declaration from defaultConfig to one of your buildTypes or productFlavors.
2
Properties properties = new Properties(); InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("fileName.properties"); properties.load(inputStream); Username=properties.getProperty("username"); password=properties.getProperty("password"); 

More detailed answer is here http://pillsfromtheweb.blogspot.in/2014/09/properties-file-in-android.html

and for asset use this code

 AssetManager assetManager = getAssets(); InputStream inputStream = null; try { inputStream = assetManager.open("fileName.properties"); properties.load(inputStream); String Username = properties.getProperty("username"); String password = properties.getProperty("password"); } catch (IOException e){ Log.e("message: ",e.toString); } 

8 Comments

Didnt work inputstream comes as null. Did you tried it yourself?
Its because your getResourceAsStream is returning null, check this stackoverflow.com/questions/18053059/…
they are saying to put file under some directory. As i specified in the question i would like to avoid that and use local.properties of root folder.
For this to work i need to put the file in assets folder of root directory . But i needed to read file local.properties from root folder. I mentioned that in the question
InputStream input = new FileInputStream("/path/of/file/fileName.properties"); put the path of your properties file inside inverted comma's,
|
1

Here's a variant of the other solutions, stripped down to the essentials:

local.properties:

username=test123 password=abcd1234 

build.gradle

android { ... defaultConfig { ... Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) buildConfigField "String", "USERNAME", "\"" + properties.getProperty('username') + "\"" buildConfigField "String", "PASSWORD", "\"" + properties.getProperty('password') + "\"" } } 

Java:

String userName = BuildConfig.USERNAME; 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.