Tag Archives: Android

Disallow debug logging in Android release build

Android_Robot_200So I’ve been doing a lot of Android development over the past several months, and came across the question of how to provide debug logging for a debug build of the library/app I’m working on, but to not let those debug logs flow through to the release build.

At first I mistakenly assumed that, hey, it’s a release build, so surely Log.d and Log.v calls won’t show up?  Wrong.  Android release builds don’t care about debug level, they’ll show whatever logging, at whatever logging level you tell it to.

So at first I sat and thought how I could fix the problem.  I came up with a few options:

  1. I could do what the Android Developer guide suggests one does, and comment out all my debug log lines before building a release build.  Ya, right, uh, no.
  2. I could wrap all the debug log lines with if(BuildConfig.DEBUG) { … }, but that felt unnecessarily painful to have to do.
  3. I could create my own Log class, with its own logic on when to actually log (such as a point 2 above, at the very least), and then just call the android.util.Log methods, but that kind of felt like overkill, as surely the expectation to have intelligent logging on Android is not that wrap the existing logging with your own…
  4. I could switch to old familiar Log4J (or Android equivalent); but yuck, that’s _really_ overkill just to get some logging on for an Android library.
  5. I could write some preprocessor and inject it into the gradle build process, that would go and strip out all the debug log calls to Log.v and Log.d, but, well, that felt like something somebody else would have done already (The world being full of lots of clever people and all…)

I then took to Google, and of course came upon several StackOverflow (Good ol’ SO) questions on the problem, and some good solutions.  It took a bit of reading, and finding more questions and answers before I found the exact solution that worked for me.  With one slight small caveat, which I’ll mention later.  Read on to hear about what I ended up using as a solution.

Continue reading

Wirelessly deploying test applications to Android device

Are you tired of having to plug your Android device into your Mac or PC while debugging changes?

I use Titanium Studio from Appcelerator for both Android and iOS development, and came across the following trick on how not have to keep your Android device plugged in via USB during development.

Assumptions:
* I am going to assume you’ve deployed a test version of your app to your device at least once using a USB cable.
* I am also going to assume you have a wireless accesspoint that your device is connected to, and your PC or Mac is connected to (PC or Mac do not need to be on wireless, just connected to the same network as the wireless AP)
* One last assumption is that you know what your Android device’s IP number is on the wireless network.

Now follow these steps to start deploying your apps wirelessly to your device:

  1. Plug your device into USB one last time.
  2. Open your command prompt (cmd.exe or Terminal.app) and check that your device is connected using abd devices
  3. Switch your adb daemon to tcpip instead of USB mode by running: adb tcpip 5555
  4. Now get adb to connect to your device by running: adb connect x.x.x.x:5555 (Replacing x.x.x.x with your device’s IP number)
  5. You can now disconnect your device from USB, and you will be able to confirm that your device is available by running: adb devices as per normal

And that’s that.  In Titanium Studio, make sure to select the “Refresh Devices” option on the Run Configurations dropdown so your device appears on the list.

Note: You may need to follow the steps above again if you reboot your PC/Mac, and you may also need to periodically run “abd connect x.x.x.x:5555” if you go for lengthy periods without deploying anything to your device, as the connection is terminated after a while.

Another note: In case you didn’t realise, the above steps work for Android devices only.

One last note, to switch adb back to normal USB mode, simply run “adb usb“.

Enjoy.

Migrating data (and apps2sd!) between SD cards on HTC Hero

Normally migrating data from an older, smaller SD card to a bigger one on any Android phone is a simple affair:

  • Connect USB cable to phone
  • Choose “Connect as drive” on phone
  • Backup files from USB device onto PC/Mac using your favourite file manager on your PC/Mac
  • Disconnect device from PC/Mac
  • Disconnect USB cable
  • Unmount SD card (Main menu -> SD card storage -> Unmount
  • Replace old SD card with new SD card
  • Reconnect USB cable
  • Choose “Connect as drive” on phone
  • Copy data back
  • Disconnect device from PC/Mac
  • Disconnect USB

All well and good, nice and simple.
BUT! What if you’ve been toying with your phone and flashing custom roms and, here’s the big one, what if you have apps2sd enabled?  Those apps are installed on an ext partition which you can’t just easily get access to.

Well, it’s not that difficult actually. Two assumptions here are that you’ve rooted your phone, and also installed (a relatively recent) version of the Amon Ra Recovery Image for your phone.
Continue reading