[G2 and Desire Z Android Development] paulobrien:
As promised on Twitter (@paulobrien), here's a guide on how to disable your chosen stock junk-ware on your G2.

Normally, you would remove stock apps by deleting the APKs from /system/app, however on the G2 this is not possible due to it's NAND protection. On reboot the apps will just re-appear, so that's no good. You could delete them on every boot via a script, but that's a bit kludgey... there has to be a better way right? RIGHT! :P

Internally, Android manages installed apps via something called 'Package Manager'. Package Manager (PM) references installed apps not by their filename or displayed name but by their internal package name (e.g. com.google.android.apps.maps). Handily, from a command line you can actually call Package Manager with the command 'pm', which gives you access to do some pretty cool stuff - especially if you have root - including disabling packages.

What does disabling a package do? It leaves the file on the system, but prevents the app from running or appearing in the launcher. This is actually quite cool because it means although the app isn't displaying or using any resources, if an update to the app is released, you'll still be notified by the Market. Should you choose to install the update, the package will be re-enabled, after which you can then disable it again if you choose. Neat eh?

So, let me give you a few examples of how you'd disable packages. Firstly you need to have temproot on your device (use VISIONary for this), and open a command shell. You can do this either via 'adb shell' on your PC, or using 'Connectbot' or 'Terminal Emulator' on your device (if you're feeling particularly sadistic). The shell needs to be elevated to root in order to use disable functionality, so type 'su'. You know if you are elevated because the prompt is a '#' instead of a '$'.

In order to disable a package, you first need to know the name of the package. pm has a function to list installed packages... simply type 'pm list packages' (obvious huh!). The output will look something like this:

# pm list packages
package:com.google.android.location
package:com.tmobile.selfhelp
package:com.android.voicedialer
package:com.android.defcontainer
package:com.android.launcher
package:com.google.android.maps.mytracks
package:com.android.debugtool
package:com.android.contacts
package:com.android.phone
package:com.tmobile.userkeystool
package:com.android.calculator2
package:com.android.htmlviewer
package:com.android.providers.calendar
package:com.android.bluetooth
package:com.android.calendar
package:com.android.browser
package:com.android.music
package:com.google.tts
package:com.android.email.policy
package:com.android.qxdmlog
package:com.android.mms
package:com.android.provision
package:com.htc.copyright
package:com.android.providers.media
package:com.android.certinstaller
package:com.google.android.deskclock
package:com.android.updater
package:com.android.settings
package:com.google.android.carhome
package:com.google.android.street
package:com.google.android.apps.genie.geniewidget
package:com.facebook.katana
package:com.google.android.googlequicksearchbox
package:com.android.providers.drm
package:com.adobe.flashplayer
package:com.android.musicvis
package:com.google.android.apps.unveil
package:com.google.android.apps.listen
package:com.android.wallpaper.livepicker
package:com.htc.web2goshortcut
package:com.android.packageinstaller
package:com.htc.fieldtest
package:com.android.providers.telephony
package:com.android.providers.subscribedfeeds
package:com.svox.pico
package:com.android.email
package:com.google.android.apps.maps
package:com.google.android.latinimetutorial
package:com.android.providers.settings
package:com.android.magicsmoke
package:com.android.providers.downloads
package:com.amazon.mp3
package:com.android.server.vpn
package:com.google.android.apps.googlevoice
package:com.photobucket.android
package:com.android.soundrecorder
package:com.htc.android.htcsetupwizard
package:com.android.vending.updater
package:com.android.inputmethod.latin
package:com.google.android.partnersetup
package:com.android.cardock
package:com.qo.android.oeme
package:com.google.android.voicesearch
package:com.google.android.apps.finance
package:com.google.android.feedback
package:com.google.android.apps.shopper
package:com.google.android.talk
package:com.htc.htcMessageUploader
package:com.cooliris.media
package:com.android.stk
package:com.android.providers.userdictionary
package:com.android.setupwizard
package:android.tts
package:com.google.android.stardroid
package:com.twitter.android
package:com.google.android.syncadapters.calendar
package:android
package:com.android.providers.contacts
package:com.android.protips
package:com.google.android.apps.uploader
package:com.google.android.apps.translate
package:com.android.providers.applications
package:com.android.vending
package:com.google.android.gm
package:com.swype.android.inputmethod
package:com.android.providers.htcCheckin
package:com.android.wallpaper
package:com.android.camera
package:com.google.android.youtube
package:com.google.earth
package:com.google.android.gsf
package:com.google.android.syncadapters.contacts
package:com.google.android.backup
#

Most of the names are pretty self explanatory... you can work out what you want to get rid of.

To disable an app, you use the 'pm disable' command with the package name. I wanted to disable the T-Mo App, MyTracks, Goggles, Listen, Web2Go, Amazon MP3, Google Voice, Photobucket, the Setup icon, Finance, Twitter and Translate, so I did this...

pm disable com.tmobile.selfhelp
pm disable com.google.android.maps.mytracks
pm disable com.google.android.apps.unveil
pm disable com.google.android.apps.listen
pm disable com.htc.web2goshortcut
pm disable com.amazon.mp3
pm disable com.google.android.apps.googlevoice
pm disable com.photobucket.android
pm disable com.htc.android.htcsetupwizard
pm disable com.google.android.apps.finance
pm disable com.twitter.android
pm disable com.google.android.apps.translate
#

...which returned...

#Package com.tmobile.selfhelp new state: disabled
# Package com.google.android.maps.mytracks new state: disabled
# Package com.google.android.apps.unveil new state: disabled
# Package com.google.android.apps.listen new state: disabled
# Package com.htc.web2goshortcut new state: disabled
# Package com.amazon.mp3 new state: disabled
# Package com.google.android.apps.googlevoice new state: disabled
# Package com.photobucket.android new state: disabled
# Package com.htc.android.htcsetupwizard new state: disabled
# Package com.google.android.apps.finance new state: disabled
# Package com.twitter.android new state: disabled

...and that's it, job done!

You'll need to restart your Launcher to see the changes (you can do this from Settings -> Applications -> Launcher -> Force Stop) and then you're done! :)

P