IpGetter Plugin
The IpGetter is a plugin which will help us to get the Ip of the current machine to use on a build.gradle.
You may ask, why do I need that? The answer is simple, you need that to replace your API URL for your computer address during development stage, to point to a MockApi or a under development api. That's the main idea.
How to use
BuildTypes, do you know it?
Have you ever made a if to change the api base url?
There's no need to check it with a if like that if (BuildConfig.DEBUG)
or String API_URL = BuildConfig.DEBUG? "192.168.10.42:3000" : "http://my-real-api.com"
.
There are a lot of ways to do that, you can create a build types and change the API URL depending on the build type.
You can enable and disable the test url just by changing you gradle.properties
.
Plugin setup?
You can choose the wanted network interface you want to use to get the ip from.
To do that you need to create a new file in your root project path. rootPath/ip.properties
.
You can also put these properties into your gradle.properties
. In your project rootPath/gradle.properties
or inside homePath/.gradle/gradle.properties
.
Inside this file you just can create three properties.
api.use_mock
this is the flag to enable your local serverapi.local_ip_interface
will be used to define the network interfaceapi.local_port
will be used to define the service port
Sample file
api.use_mock=true
api.local_ip_interface=wlp9s0
api.local_port=3000
Using
Now, in your app level root/app/build.gradle
call the method localIpOr()
. Yes you can call methods inside the build.gradle
files, so do it.
It will be like this
buildConfigField "String", "API_URL", "\"${localIpOr('http://my-real.api')}\""
Sample
Here is a sample of how the build.gradle
will end up.
buildscript {
dependencies {
classpath 'com.brunodles:ipgetter:1.1.0'
}
}
apply plugin: 'ipgetter'
android {
...
defaultConfig {
...
buildConfigField "String", "API_URL", "\"${localIpOr('http://my-real.api')}\""
}
}
You can also change it only on debug
build type
android {
...
defaultConfig {
...
buildConfigField "String", "API_URL", "\"http://my-real.api\""
}
buildTypes {
...
release {
...
// don't change anything on release
}
debug {
...
buildConfigField "String", "API_URL", "\"${localIpOr('http://my-real.api')}\""
}
}
}
Contributing
Issues are welcome, create one and we will discourse about it. If you saw any error, please reports, it will be a great help.
Licence
You can use any code you found here, some of then I found on the internet too.
I'm using the MIT Licence, take a look on Licence.
If you're using this plugin, please give me some credits too.
Sources
This one have many sources, I don't remember where I found it at first, it was on 2014. Now we have some articles about it, so I'll link some of then.