解决ICS40上设置APN无权限问题

在ICS40以前的版本中,如果程序需要设置APN,只需要在AndroidManifest文件中声明<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>这个权限即可。在40的机器上运行则会抛出以下异常:java.lang.SecurityException: No permission to write APN settings: Neither user *** nor current process has android.permission.WRITE_APN_SETTINGS.

原因是google基于安全性考虑屏蔽了第三方应用对于APN的访问权限,网上有人说把程序设为系统app即可。通过adb push命令将apk放到/system/app/目录下确实可行,但是大多数app都是作为第三方应用,这样的可行性不大。因此利用系统签名来使app具有APN访问权限。

第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:

1. 在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性。

2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行

3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。

第二个方法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:

1. 同上,加入android:sharedUserId="android.uid.system"这个属性。

2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。

3. 用压缩软件打开apk文件,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件。

4. 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,首先找到密钥文件,在我的Android源码目录中的位置 是"build\target\product\security",下面的platform.pk8和platform.x509.pem两个文件。然 后用Android提供的Signapk工具来签名,signapk的源代码是在"build\tools\signapk"下,用法为java -jar signapk.jar platform.x509.pem platform.pk8 ***.apk ***_signed.apk 得到具有对应权限的APK.

工具和密钥下载地址:http://download.csdn.net/detail/bulkin/4329253

这样最后得到的apk和第一个方法是一样的。

最后解释一下原理,首先加入android:sharedUserId="android.uid.system"这个属性。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,这样就 有权限来修改系统时间了。

只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform. key,就是上面第二个方法提到的platform.pk8和platform.x509.pem两个文件。用这两个key签名后apk才真正可以放入系 统进程中。第一个方法中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名。

这也有一个问题,就是这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用,因为这样的系统才可以拿到platform.pk8 和platform.x509.pem两个文件。要是别家公司做的Android上连安装都安装不了。试试原始的Android中的key来签名,程序在 模拟器上运行OK,不过放到G3上安装直接提示"Package ... has no signatures that match those in shared user android.uid.system",这样也是保护了系统的安全。

最最后还说下,这个android:sharedUserId属性不只可以把apk放到系统进程中,也可以配置多个APK运行在一个进程中,这样可以共享数据,应该会很有用的。

解决ICS40上设置APN无权限问题

时间: 2024-12-07 20:45:18

解决ICS40上设置APN无权限问题的相关文章

在FTP服务器上给不同的用户设置不同的权限实现不同的功能

实验环境:一台原始干净的虚拟机,ip地址为172.20.53.1.并且事先为这台虚拟机安装上web服务器和ftp服务器 实验目的:使zhangsan能实现上传下载,lisi只能上传,匿名用户只能下载 实验步骤: 首先创建FTP站点,默认情况下,IIS管理器中只有一个Web站点,下面新建一个FTP站点,单击右侧"操作"面板中的"添加FTP站点"选项.启动"添加FTP站点"向导. 为站点起个名字,并指定FTP站点的主目录,FTP默认的主目录是:C:\

微信支付开发(APP)的各种坑,.net和iOS的各种陷阱,解决.net调用下单接口提示无权限,解决iOS跳转到微信支付页面中间只有一个确定按钮

直入主题之前,请容我吐槽一下微*的官方东西:ASDFQ%#$%$#$%^[email protected]#$%DSFQ#$%.......:吐槽玩了!大家心照就好. 要完成手机APP跳转到微信的APP进行微信支付,需要进行如下操作: 1.先去微信的开放平台(http://open.weixin.qq.com)进行开发者账号的注册. 2.新建一个APP应用,然后填写必填信息提交审核. 3.进入APP应用,在接口信息中,进行申请“获得微信支付能力”的功能,期间会提交相关的公司营业信息证明等. 通过

成功解决在Python文件上右键菜单无“Edit with IDLE”选项

我电脑是Win7旗舰版,之前电脑上安装的是Python2.6版本的,前两天为了体验一下Microsoft Excel与Python之间互操作, 下载并安装了DataNitro,在安装的时候脑残的安装了Python2.7.5,但是这两天在用的时候,发现之前安装的一些包后不能用了: print sys.path 才知道,Python的搜索路径变成了Python2.7.5的路径了,傻眼了,怎么办? 于是,一通百度,google之后,折腾了一个上午,终于搞定了: 首先,我在cmd里面是可以正常使用Pyt

ORA-01950: 表空间&#39;USERS&#39;中无权限的2种解决办法

总的来说这个错误是由于对表空间操作的权限不足造成的,所以这个时候就可以检查出错之前对于所操作的表赋权grant connect,resource to zhangbojie ; ORA-01950: 表空间'USERS'中无权限的2种解决办法

金蝶K3,域环境中,无本地用户管理员权限的域用户如何设置注册表权限?

如果该用户是属于Power Users组:只需要给用户添加注册表中的HKEY_LOCAL_MACHINE的SOFTWARE完全控制的权限.(勾选允许父项的继承权限和传播到该对象和所有子对象) 如果该用户是属于Users组:除了需要给用户添加注册表中的HKEY_LOCAL_MACHINE的SOFTWARE完全控制的权限以外,还需要给用户添加注册表中HKEY_CLASSES_ROOTD的APPID以及KdSvrmgr.clsAct完全控制的权限. 金蝶K3,域环境中,无本地用户管理员权限的域用户如何

mac上pip install时提示/System/Library/... 无权限

使用pip install安装包时,提示无权限,即使切换到root账号,仍然提示无权限 加上--user参数解决,如: pip install --user  ipython 原文地址:https://www.cnblogs.com/jinghan/p/8573119.html

首次使用windows管理界面访问安装在UNIX或linux下的DP服务器时提示无权限访问的解决方法

用windwos GUI管理界面连接时提示无权限访问: 在/etc/opt/omni/server/users/userlist 添加一行: "" "*" "*" * "admin"  再次运行DP的图形界面即可正常访问DP了.

XP局域网访问无权限、不能互相访问问题的完整解决方案

XP局域网访问无权限问题的完整解决方案: 1:用管理员账户登录系统 2:在"开始"-- "运行"里输入 GPEDIT.MSC 目的是打开组策略选项 3:依次展开"WINDOWS设置"-"本地策略"-"用户指派权利" 在窗口右边栏里找到"拒绝从网络访问这能计算机"后,双击打开, 把里面的GUEST帐户删除 4:依次展开"WINDOWS设置"-"本地策略&quo

微信支付(APP)集成时碰到的问题(.net提示“无权限”、iOS跳转到微信支付页面中间只有一个“确定”按钮)

直入主题之前,请容我吐槽一下微*的官方东西:ASDFQ%#$%$#$%^[email protected]#$%DSFQ#$%.......:吐槽玩了!大家心照就好. 要完成手机APP跳转到微信的APP进行微信支付,需要进行如下操作: 1.先去微信的开放平台(http://open.weixin.qq.com)进行开发者账号的注册. 2.新建一个APP应用,然后填写必填信息提交审核. 3.进入APP应用,在接口信息中,进行申请“获得微信支付能力”的功能,期间会提交相关的公司营业信息证明等. 通过