admin管理员组

文章数量:1595157

首先,我们的安卓设备已经root过了,我们的app是要做成系统app的。

直接删除wifi会失败

一般的,删除保存的wifi代码是这样的

WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

Listconfigs = wifiManager.getConfiguredNetworks();

for (WifiConfiguration config : configs) {

boolean result = wifiManager.removeNetwork(configworkId);

forgetWifi(wifiManager, configworkId);

removeWifi(wifiManager, configworkId);

deleteWifiConfig();

LogUtil.log("remove network. networkId=%d, ssid=%s,result=%b", configworkId, config.SSID, result);

}

removeNetwork这个方法点进去,可以看到谷歌这么说,

Applications are not allowed to remove networks created by other applications.

至于我们添加的网络为什么会变成别人的,这我还没搞明白,反正每次重装apk,之前保存的网络就删不掉了。

解决方案->把app变成系统app,并赋予system权限

步骤:

1) 修改清单文件

因为删除保存的wifi是要检查权限的,如果UID是systemUID,会直接通过权限检查。

2) 打一个包,app-debug.apk。

3) 进行系统签名。

在源码里下载或从我给的链接下载

platform.x509.pem、platform.pk8、signapk.jar

我的下载链接:

https://download.csdn/download/weixin_36001685/11827441

源码地址

https://www.androidos/

文件位置

platform.x509.pem、platform.pk8:

…/build/target/product/security

signapk.jar:

…/out/host/linux-x86/framework

signapk源码路径:

…/build/tools/signapk

对app-debug.apk进行签名。签名命令

java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk

4) 拷贝到安卓设备里。

adb push D:\WorkSpace\app-debug-new.apk /mnt/sdcard

5) 打开安卓设备界面,打开有root权限的文件管理器,我用的是Total Commander,下载地址

https://download.csdn/download/weixin_36001685/11782914

6) 剪切/mnt/sdcard/app-debug.apk,粘贴到/system/app目录下。

7) 使用Total Commander赋予app-debug.apk权限744。

8) 重启安卓设备。

重启成功后可以看到app已经安装了。如果没有安装好,再用Total Commander进去看/system/app/app-debug.apk是否拥有744权限。

至此,该app可以为所欲为了。

系统签名参考

https://www.jianshu/p/47265c8899b5

其它可能的方案

删除保存的wifi或许可以通过hook检查权限的方法来实现?我弄了好久,没搞成功。

删除WiFi还可以通过直接删除文件

/data/misc/wifi/wpa_supplicant.conf

来实现。但是很遗憾,我通过Total Command可以删除该文件,但是通过代码删除却总是报错权限拒绝。即使用adb shell ,su进去删除也是权限拒绝。最后放弃。

本文标签: 权限系统androidwifi