adb push与adb install的区别

adb install 重新安装launcher后出现以下异常:

E/LauncherProvider( 2064): Problem allocating appWidgetId
E/LauncherProvider( 2064):  java.lang.SecurityException:  bindGagetId appWidgetId=843 provider=ComponentInfo{com.android.quicksearchbox/com.android.quicksearchbox.SearchWidgetProvider}:  User 10047 does not have android.permission.BIND_APPWIDGET.
E/LauncherProvider( 2064):      at android.os.Parcel.readException(Parcel.java:1247)
E/LauncherProvider( 2064):      at android.os.Parcel.readException(Parcel.java:1235)
E/LauncherProvider( 2064):      at com.android.internal.appwidget.IAppWidgetService$Stub$Proxy.bindAppWidgetId(IAppWidgetService.java:470)
E/LauncherProvider( 2064):      at android.appwidget.AppWidgetManager.bindAppWidgetId(AppWidgetManager.java:368)
E/LauncherProvider( 2064):      at com.xxx.launcherplus.LauncherProvider$DatabaseHelper.addAppWidget(LauncherProvider.java:827)


搜索后得到如下比较满意的答案:

原文地址:http://www.krvarma.com/posts/android/security-permissions-in-android/

As we all know whenever we use a particular feature or API we need to request the permission in AndroidManifest.xml file with uses-permission element. If we don’t specify any permissions, then the application will not have any permission and application can do anything that does not require a permission. This link explains the permissions in android in more detail and this link lists the permissions in Android.

Permissions are granted to the application by package installer while installing. But not all the permissions will be granted to the system. There are some system permission which will not be granted to the user applications, but only to the system applications. Following are some of the permissions that may NOT be granted to the user application.

android.permission.ACCESS_CHECKIN_PROPERTIESandroid.permission.ACCESS_SURFACE_FLINGERandroid.permission.ACCOUNT_MANAGER android.permission.BIND_APPWIDGETandroid.permission.BIND_DEVICE_ADMINandroid.permission.BIND_INPUT_METHODandroid.permission.BIND_WALLPAPERandroid.permission.BRICKandroid.permission.BROADCAST_PACKAGE_REMOVEDandroid.permission.BROADCAST_SMSandroid.permission.BROADCAST_WAP_PUSHandroid.permission.CALL_PRIVILEGEDandroid.permission.CHANGE_COMPONENT_ENABLED_STATEandroid.permission.CLEAR_APP_USER_DATAandroid.permission.CONTROL_LOCATION_UPDATESandroid.permission.DELETE_CACHE_FILESandroid.permission.DELETE_PACKAGESandroid.permission.DEVICE_POWERandroid.permission.DIAGNOSTICandroid.permission.FACTORY_TESTandroid.permission.FORCE_BACKandroid.permission.GLOBAL_SEARCHandroid.permission.HARDWARE_TESTandroid.permission.INJECT_EVENTSandroid.permission.INSTALL_LOCATION_PROVIDERandroid.permission.INSTALL_PACKAGESandroid.permission.INTERNAL_SYSTEM_WINDOWandroid.permission.MANAGE_APP_TOKENSandroid.permission.MASTER_CLEARandroid.permission.READ_FRAME_BUFFERandroid.permission.READ_INPUT_STATEandroid.permission.REBOOTandroid.permission.SET_ACTIVITY_WATCHERandroid.permission.SET_ORIENTATIONandroid.permission.SET_PREFERRED_APPLICATIONSandroid.permission.SET_TIMEandroid.permission.STATUS_BARandroid.permission.UPDATE_DEVICE_STATSandroid.permission.WRITE_GSERVICESandroid.permission.WRITE_SECURE_SETTINGS

To get these permissions, the application must be signed with the key which used to sign the platform. This may be different for manufacturers. So it practically not possible to get these permissions granted to a user application.

Note: While playing with PowerManager.reboot I was so stupid I thought my application will be granted the permission android.permission.REBOOT, but it was not granted. Then I created an application requesting all the permissions and above list of permissions are not granted. Hope this will help you when you request a permission next time.

读了这篇文章之后,了解到android里的应用有用户级和系统级之分。而之前我恰恰一直是用adb install... 来安装launcher应用的, 所以就出现了上面的异常。知道了产生问题的根源,解决办法自然就有了,换用adb push...一安装马上搞定。

补充一点小知识,关于adb push 和 adb install 的区别:
adb push 能够指定安装目录。比如执行"adb push xxx.apk system/app" 后,xxx.apk被安装到了system/app目录下,此目录下的软件为上文中提到的system application。                                                                       
adb install 用此命令安装的软件位于 data/app 目录,则为user application。    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值