Yes, this can be done.
Create a new firmware image for a phone, include your app in the /system/app
directory and, since this directory is read-only during runtime, the app cannot be uninstalled. i.e. it is pre-installed.
Otherwise no, this cannot be done. However, with a non-system app, the system does notify other applications after your app has been uninstalled via a PACKAGE_REMOVED
broadcast.
So it's possible to determine that your app was uninstalled, but — without flashing the whole phone with a new firmware — there is no way to prevent your application from being uninstalled. Which is a good thing.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…