如何制作,以便用户无法删除预装的Android应用?

时间:2011-07-07 15:44:57

标签: android

如果我是OEM制作自己的固件,并且我希望设备上预装的应用程序无法删除,我需要做什么?

例如,假设我制作了ACME Gadget 2000,并且当用户将其从包装盒中取出时,它已经让我的Cats应用程序说出有趣的东西,而且我不希望用户能够删除它,我究竟与APK有什么关系?

我有一个Verizon摩托罗拉Droid X,它附带了一些我无法删除的应用程序。他们是怎么做到的?

非常感谢。

大卫

2 个答案:

答案 0 :(得分:5)

不可移动的OEM应用程序安装在/system/app目录中(至少在我见过的每种情况下,我想可能有例外)。它们无法卸载(无法生根设备),因为默认情况下/system分区以只读方式挂载。我不知道有任何方法可以将.apk本身设计为可卸载,因为允许开发人员明显存在重大的安全隐患。

Samsung Fascinate的挂载列表示例:

  

/ dev / block / stl9 / system rfs ro ,relatime,vfat,log_off,check = no,gid / uid / rwx,iochaset = utf8 0 0

答案 1 :(得分:0)

我的意思是它有点棘手但可以做到。您必须分配BroadcastReceiver,它在发生android.intent.action.PACKAGE_REMOVED时触发,如:

 <receiver android:name ="com.mydomain.myapplication.PackageReceiver">
            <intent-filter>
              <action android:name="android.intent.action.PACKAGE_REMOVED"/>            
              <data android:scheme="package" />
            </intent-filter>
 </receiver>

然后当你在BroadcastReceiver中抓住这个意图时 - 只需取消它即可。好吧,可能你应该以在其他人之前接收广播的方式定义意图过滤器优先级。

但问题很简单,即要删除的包不会收到android.intent.action.PACKAGE_REMOVED。这意味着你必须保留自己独立的应用程序/软件包,这将使服务人员观察谁将要卸载你的应用程序。

这是一般方案 - 但实际上它是如何运作的 - 我不知道......试试!