A System app is an app which is placed under /system/app folder in an Android device. As /system is read-only, such an app cannot be uninstalled by an "ordinary" user.

A System application is NOT an application which is signed by the OS’s platform signatures. This is a common mistake believed by many and we shall come to this later on. A System application is merely an application which is placed under /system/app folder in an Android device. An application can only be installed in that folder if we have access to the OS’s ROM (system.img), or if /system is mounted read-write (which requires root permissions on the device).

System apps have several benefits:

  • they are largely protected (e.g. cannot be uninstalled by the user), as /system is read-only
  • being thus protected, they survive a (only the apps, not their data)
  • they are considered "trusted" (as the sources are assumed to be safe, confirmed by the ROM creator)
  • being "trusted", they can get access to some restricted app permissions which are not available to "user-space apps" (e.g. ACCOUNT_MANAGER, MANAGE_APP_TOKENS); if a user-space app requests those, they are denied.

A non-System application is an ordinary application, which will be installed under /data/app folder, which is read-write. A user can uninstall such applications normally from the Settings application. One can check if an application is a System application or not using ApplicationInfo.FLAG_SYSTEM. If the constant returns true, then the application in question is a System application.

Read more at ricston.com