Friday, January 30, 2015

Using gdalwarp to mosaic adjacent geo-referenced images

I had to merge adjacent 1 km by 1 km GeoTiff ortho-rectified mosaic images into 2 km by 2 km tiles and I really did not want to run the ortho-rectification and mosaicking processes again just to resize the tiles. After some digging around I found that GDAL has a few tools to perform the merging. I chose to use the gdalwarp executable, as it allows me to define a list of images to merge and the destination image bounds.


The following example shows how to use gdalwarp to merge 2 adjacent GeoTiff images into one.
Two adjacent image tiles to merge
  1. Open up a Command Prompt. Type in the gdalwarp command to merge two files e.g. left.tif and right.tif and output to a new file mosaic.tif:

    C:> gdalwarp left.tif right.tif mosaic.tif
  2. Press Return.

    Processing messages appear and the files are merged.



    The resultant merged GeoTiff image

Wednesday, January 21, 2015

How to mirror or project an Android device screen to a Mac

I wanted to be able to project the screen of an Android handset on to a Macbook to demo an app to an audience. I found a post for a Windows PC on this site http://dmzilla.com/2014/07/21/how-to-display-or-mirror-an-android-device-screen-on-pc-no-root/ but not for a Mac. The post describes downloading and using the Android SDK platform tools along with a Jar file to do the projection to a PC. I thought that the same Jar file could be used on a Mac so I tried out the idea, and it turned out to be functional. So here are the steps to get it to work on a Mac. I am assuming that the following has been done:

  • The Java SE Runtime Environment (JRE) has been installed
  • The Android SDK has been installed to a folder on the Mac e.g. /home/users/admin/Application/sdk/


  1. Download the Jar file http://dmzilla.com/files/display-android-on-windows-pc/%5bDMZilla%5d-Android-Screen-Monitor-(ASM).jar. Put the Jar file to the same location as the Android SDK's adb executable e.g. /home/users/admin/Application/sdk/platform-tools/.

    Note: the actual souce code is available on https://code.google.com/p/android-screen-monitor/
  2. Connect an Android device to the Mac. If necessary, enable USB debugging on the device.
  3. Open up a Terminal.

  4. In the Terminal, type in the cd command to change to the location of the Jar file.

    $ cd /home/users/admin/Application/sdk/platform-tools
  5. Set the Path environment variable to include the Android SDK's platform-tools folder. In the Terminal, type in the export command.

    $ export PATH=$PATH:/home/users/admin/Application/sdk/platform-tools
  6. In the Terminal, run the Jar file.

    $ java -jar \[DMZilla\]-Android-Screen-Monitor-\(ASM\).jar
    The Select a Android Device prompt appears.
  7. In the Select a Android Device prompt, click the device label. Click OK.

    The Android Screen Monitor displays the screen contents of the Android device.
  8. Now on the Android device, run any app you want to present and project to the Mac screen.


Monday, January 5, 2015

Enabling ProGuard obfuscation in Android Studio

In Android Studio, it is possible to use ProGuard to minify and obfuscate the Java source code from decompilation. The settings are different from the Eclipse ADT as Android Studio uses the Gradle build system. But still as straightforward provide you know where and what to change. At the minimum, you only need to enable ProGuard but sometimes it may be necessary to define classes that you do not want ProGuard to obfuscate - this can be done in a ProGuard rules file. The following steps illustrate these two tasks.

Enable ProGuard

  1.  In Android Studio, open up an Android project.
  2. Change to Project View.


  3. Edit the app's build.gradle file.

    Note: make sure the correct build.gradle file is edited. Typically, it is [Android project]/app/build.gradle.
  4. Change the following line:

    minifyEnable false

    to

    minifyEnable true
Set ProGuard Rules(optional)
  1. In Project View, select the proguard-rules.pro file.

    Note: Typically it is [Android project]/app/proguard-rules.pro.


  2. Add in the following lines to tell ProGuard not to obfuscate certain classes. 

-keepclassmembers class com.dom925.xxxx {
   public *;
}


Now when a release build is generated using Android Studio, the app will be obfuscated.