get in touch
>

LIKE

SHARE

Facebook Share Tweet LinkedIn Share

FOLLOW

LinkedIn Follow Xing Follow
Sebastian Macarescu

Android Developer at ASSIST

 

Often times when writing a library to be used by many clients (servers, mobile apps), the programmer is faced with the following feature: making it configurable by implementing an intermediate layer which alters its
functionallity. This is a small tutorial about how to override properties files from jar dependency
Let's take for example a library for http calls which consumes an api. The programmer using this sdk may want to change the url of the api, the port, client validation tokens, or default credentials.

One way of implementing the before mentioned layer is through properties files. Create a file named config.properties and place it under resources directory.

You can put in it the options to be overridden. Example:

application.auth.appid=<generated_app_id>

application.auth.appkey=<generated_app_key>

application.auth.useragent=App Java Client

application.auth.serverurl=<api_url>

The file must be placed in the classpath. Make sure the resources directory is present in maven file. If not add under resources tag the following:

<resource>

  <directory>relative_path_to_file_here</directory>

</resource>

This will include the file when building the jar which means you now have some default properties.

Reading the properties file is done through:

Properties prop = new Properties();

String propFileName = "config.properties";

try{

 

 InputStream inputStream = Config.class.getClassLoader().getResourceAsStream(propFileName);

 if (inputStream != null) {

   prop.load(inputStream);

 } else {

   throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");

 }

 appId = prop.getProperty("application.auth.appid");

 appKey = prop.getProperty("application.auth.appkey");

 userAgent = prop.getProperty("application.auth.useragent");

 serverUrl = prop.getProperty("application.auth.serverurl");

 inputStream.close();

}

catch(IOException e){

 e.printStackTrace();

}

In android studio you can include the library as usual with gradle: compile 'groupId:artifactId-version' (the variables can be extracted from the maven build file).

If you try to create a file with the same name: config.properties, which will contain the new configuration and place it under assets, res or raw, it will be included in the apk under folders with same name. Since the apk is just an archive you can open it with a zip client to explore the contents and check where the file is placed.
What we want is to include it in the root path of the apk. To do that, create a directory named "resources" under /src/main path and place the new file there. You have now a fully configurable sdk. Congratulations.

To understand more about class loaders and how resources are loaded, read the following:

http://www.javaworld.com/article/2077260/learn-java/learn-java-the-basics-of-java-class-loaders.html
http://www.onjava.com/pub/a/onjava/2005/01/26/classloading.html

android-how-to-override-properties-files-from-jar-dependency-ASSIST-Software

Photo source: https://www.flickr.com/photos/uncalno/8538679708

Do you want to get in touch with us? 

If you are interested in our software development services, you would like to join our team, or you simply want to find out more about us, we’d love to hear from you! Drop us a line and a member of the ASSIST team will get back to you as soon as possible. We are sure we can ASSIST you.

GET IN TOUCH