Thursday, December 17, 2015

Configure Android Studio for UnitTesting with legacy structure

So you want to to use unit testing with Android Studio and you have an old code base that does not follow the standard folder structure of Android Studio.

- You need to create test/java folders in the module you want to test.
-- Tip: use external file explorer (e.g. Mac Finder) to do so outside Android.
- Add this to you module dependencies at build.gradle:
-- compile 'junit:junit:4.12'
-- Add Junit to the classPath
-- Start Testing!

Tuesday, December 8, 2015

Working with Legacy Code

As I am trying to find my way to a better quality well structured code, I am in my journey reading "Working Effectively with Legacy Code" by Michael Feathers.

I found the following strategy interesting:
"The general legacy management strategy is:
1. Identify change points
2. Find an inflection point
3. Cover the inflection point
 a. Break external dependencies
 b. Break internal dependencies
 c. Write tests
4. Make changes
5. Refactor the covered code."

Thursday, December 3, 2015

Dependencies Report in Android

So I learnt a nice feature through the Android Summit, How to generate dependencies report for certain module in your app:

-Gradle plugin -> your module -> help -> dependecies
- It will suffer saying no configurations
- Go to  Edit configurations -> tasks -> put your module you need to analyze e.g. ":app:dependencies"
- Build and run again, you would get sth like that:
+--- com.android.support:multidex:1.0.1
+--- project :volley
+--- com.squareup.picasso:picasso:2.5.2
+--- com.beaconinside:beaconinside-sdk-basic-1.2.2:
+--- com.android.support:support-v4:21.0.0 -> 23.0.1
|    \--- com.android.support:support-annotations:23.0.1
+--- com.android.support:appcompat-v7:21.0.0
|    \--- com.android.support:support-v4:21.0.0 -> 23.0.1 (*)
+--- com.google.android.gms:play-services-analytics:7.5.0
|    \--- com.google.android.gms:play-services-base:7.5.0
|         \--- com.android.support:support-v4:22.0.0 -> 23.0.1 (*)
+--- com.google.android.gms:play-services-gcm:7.5.0
|    \--- com.google.android.gms:play-services-base:7.5.0 (*)
+--- com.amazonaws:aws-android-sdk-core:2.+ -> 2.2.9
|    \--- com.google.code.gson:gson:2.2.4 -> 2.3.1
+--- com.amazonaws:aws-android-sdk-sns:2.+ -> 2.2.9
|    +--- com.amazonaws:aws-android-sdk-core:2.2.9 (*)
|    \--- com.amazonaws:aws-android-sdk-sqs:2.2.9
|         \--- com.amazonaws:aws-android-sdk-core:2.2.9 (*)
+--- com.readystatesoftware.systembartint:systembartint:1.0.3
+--- com.sensorberg.sdk:android-sdk-bootstrapper:2.0.0
|    \--- com.sensorberg.sdk:android-sdk:1.0.0 -> 1.0.4
|         +--- com.sensorberg.android:okvolley:1.1.4
|         |    +--- com.squareup.okhttp:okhttp-urlconnection:2.2.0
|         |    |    \--- com.squareup.okhttp:okhttp:2.2.0
|         |    |         \--- com.squareup.okio:okio:1.2.0
|         |    +--- com.google.code.gson:gson:2.3.1
|         |    +--- com.squareup.okhttp:okhttp:2.2.0 (*)
|         |    \--- com.sensorberg.android:volley:1.2.4
|         +--- io.realm:realm-android:0.79.1
|         +--- net.danlew:android.joda:2.7.2
|         |    \--- joda-time:joda-time:2.7
|         +--- com.sensorberg.android:networkstate:1.0.0
|         \--- com.sensorberg.android:volley:1.2.4
+--- com.sensorberg.sdk:android-sdk:1.0.4 (*)
+--- org.igniterealtime.smack:smack-bosh:4.1.5
|    +--- org.igniterealtime.smack:smack-core:4.1.5

Happy analyzing! :)