pm hide VS pm disable -- the identity crisis
I don't have enough points to comment yet.. This is not an answer... more like... information:

pm hide does this

pm disable does this and if it can find the component name then this.

I can see how some people may have thought that pm hide would do an uninstall.  

ex.  If you run this command after a pm hide

diff &lt;(adb shell pm list packages -u) &lt;(adb shell pm list packages)


You'll see your hidden package.  -u is a list of previously uninstalled packages.  

These pm commands below all invoke androids Intent class.

pm hide &lt;package&gt;
pm unhide &lt;package&gt;
pm enable &lt;package&gt;
pm disable &lt;package&gt;


This command below:

pm hide &lt;package&gt;


invokes:

android.intent.action.PACKAGE_REMOVED.  


This below command:

pm unhide &lt;package&gt;


invokes:  

android.intent.action.PACKAGE_ADDED.


pm disable and pm enable both invoke:  

android.intent.action.PACKAGE_CHANGED.


Thanks @Irfan Latif for the corrections.  I can verify what he was saying.  Under Android Settings:  If you look at installed apps, even after pm hide, you can still see the app is installed.  Interestingly, with pm disable, the app disappears from installed apps.  These commands don't seem to create any obvious filesystem changes.  

These directories:

/mnt/sdcard/Android/data/
/data/data


and other misc directories...

One possible hypothesis... Maybe its best practice to always call both commands to disable any package:

pm disable &lt;package&gt;;pm hide &lt;package&gt;