Unity在生成APK包的时候会根据AndroidManifest.xml模板文件和Player settings里的发布设置来生成AndroidManifest.xml文件。
由于最近项目需要,有些Android设备(机上)不支持一些权限,诸如:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
等权限。。。
起初,我也跟很多人想的一样,将Unity安装目录的AndroidManifest文件拷贝过来,不要给里面配任何权限,那么自然就没有这些权限了。其实不然,最后用Android SDK里面的build-tools文件夹下的aapt测试:
aapt dump badging *.apk
还是有这些权限,老是删不掉。。怀疑Unity自己给添加了这些权限。。。好一阵子都在吐槽Unity太坑。。有办法是到处Android项目再进行删除,无奈无法割舍自己辛苦写下的Unity一键打包。。
我用Unity创建一个空的项目还是回有那些可恶的权限,实在不知怎么办了。网上也没什么好的解决办法,最后升级了Unity的版本,再次测试的时候给了我惊喜,居然空项目没有了那些权限,怀疑是Unity版本的问题。。既然这样那可能是Unity自己官方修复 了这个问题吧。。好景不长,在新的项目又出现了那些权限,,这是怎么回事、。?又建一个空项目测试,没有啊!!!怎么了?两个项目比较,发现无非就是多了个NGUI。。对就是这个东西。。删除之后打包,没有了权限。。那我们就没法用NGUI了吗?不是的,我想Unity之所以要给我们自动添加一些权限,是因为我们代码里面一定调用了应用到这些权限的接口,所以找到对应的接口然后屏蔽掉就可以了。
<uses-permission android:name="android.permission.INTERNET" />
这个权限起初以为是Application.OpenURL,其实是WWW这个类的引用才会出现这个权限。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
顾名思义,这个定时访问网络状态的,Application.internetReachability == NetworkReachability.NotReachable类似的判断自然不能有。
最后检查第三方的插件SDK,如友盟神马的,如果你用了类似的jar包或者代码引用,就需要注意了。很多情况都需要权限。
所以你把这些东东清理干净之后,你会发现权限消失了。。
SystemInfo.deviceUniqueIdentifier
调用这个接口也会导致Unity自动添加
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
这两个权限。
如果你使用了obb分包的话,Unity也会自动添加一些额外的权限
uses-permission:'android.permission.INTERNET'
uses-permission:'android.permission.ACCESS_NETWORK_STATE'
uses-permission:'android.permission.ACCESS_WIFI_STATE'
uses-permission:'com.android.vending.CHECK_LICENSE'
uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE'