Uma*_*r M 5 android unity-game-engine android-manifest
注意:此问题特定于Unity3D
我在Unity项目的Plugins/Android/文件夹下有一个非常干净的android清单文件,根本没有<uses-permissions/>标记.我相信最终APK中的某些权限来自Android播放器设置 - 例如READ_EXTERNAL_STORAGE.在我的Gear VR项目中,我看到最终清单中添加了以下行,可以在以下位置访问Temp/StagingArea/:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature android:name="android.hardware.microphone" android:required="false" />
Run Code Online (Sandbox Code Playgroud)
现在这肯定来自我项目中的一个插件(我有很多插件).
我的应用程序被Oculus拒绝了
您的应用要求不恰当地使用用户权限的过多用户权限.
我在这里找到了一个解决方法,但我不想做这样的事情,因为这可能会再次导致应用拒绝.
所以
有没有办法让我知道这个许可来自哪里?
如何找出我的脚本中是否有一些代码导致统一包含此权限?
谢谢
Cli*_*ore 14
我认为如果您的 Unity 项目是使用gradle. 如果不是,这是升级的另一个原因。
此外,对一篇名为“嘿,这些权限从何而来?)
这是文件的一部分,我在其中查找 WRITE_EXTERNAL_STORAGE 权限。
uses-permission#android.permission.WRITE_EXTERNAL_STORAGE
ADDED from /Users/clinton/Projects/<<ProjectName>>/Temp/gradleOut/src/main/AndroidManifest.xml:7:3-79
MERGED from [gradleOut:IronSource:unspecified] /Users/clinton/Projects/<<ProjectName>>/Temp/gradleOut/IronSource/build/intermediates/bundles/default/AndroidManifest.xml:13:5-81
android:name
ADDED from /Users/clinton/Projects/<<ProjectName>>/Temp/gradleOut/src/main/AndroidManifest.xml:7:20-76
Run Code Online (Sandbox Code Playgroud)
可以通过三种方式将权限添加到您的项目中。
我的示例在 Mac 上使用命令行工具。我不知道 Windows 等价物,但可以在那里找到并运行 unix 工具(使用适用于 Windows 10、cygwin、自定义二进制文件等的 linux 子系统)
cd /path/to/my/project/Assets
grep -r "uses-permission" --include "AndroidManifest.xml" .
Run Code Online (Sandbox Code Playgroud)
这将在当前文件夹 ( .) 或其任何子文件夹中找到所有名为 AndroidManifest 的文件(-r告诉它递归搜索)并吐出任何带有“uses-permission”字样的行。
在我当前的项目中,我得到如下输出:
./Plugins/Android/AndroidManifest.xml: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
./Plugins/Android/AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" />
./Plugins/Android/AndroidManifest.xml: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
./Plugins/Android/AndroidManifest.xml: <uses-permission
./Plugins/Android/IronSource/AndroidManifest.xml: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
./Plugins/Android/IronSource/AndroidManifest.xml: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
您的项目可能包含 android 库(.aar 文件)和 java 档案(.jar 文件)。一些 android 库包含一个 android 清单并指定使用库所需的权限。(我认为 .jar 文件实际上不会这样做,但 .aar 文件绝对可以)。.aar 和 .jar 文件都是 .zip 文件,具有不同的扩展名和特定位置的特定元数据。
通过运行找到它们:
find . -iname "*.?ar" -print -exec zipgrep "uses-permission" "{}" "AndroidManifest.xml" ";" 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
这是它的作用。它查找任何文件(在当前文件夹 ( .) 及其子文件夹中)具有(某事) ar 的扩展名,因此是 .jar 或 .aar ( -name "*.?ar")。它输出存档的文件名 ( -print)。然后它运行zipgrep( -exec)。Zipgrep 被告知搜索存档 ( {}) 中名为“AndroidManifest.xml”的任何文件,并输出任何带有“uses-permission”字样的行。然后,我们将错误通过管道传送到位桶 ( 2> /dev/null),这样我们就不会看到很多关于档案中没有 android 清单的错误。
示例输出如下所示:
./OneSignal/Platforms/Android/onesignal-unity.aar
AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" />
AndroidManifest.xml: <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
AndroidManifest.xml: <uses-permission android:name="android.permission.WAKE_LOCK" />
AndroidManifest.xml: <uses-permission android:name="android.permission.VIBRATE" />
...
./Plugins/Android/android.arch.core.common-1.1.0.jar
./Plugins/Android/android.arch.core.runtime-1.1.0.aar
./Plugins/Android/android.arch.lifecycle.common-1.1.0.jar
...
./Plugins/Android/com.google.android.gms.play-services-gcm-11.8.0.aar
AndroidManifest.xml: <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" />
./Plugins/Android/com.google.android.gms.play-services-gcm-license-11.8.0.aar
./Plugins/Android/com.google.android.gms.play-services-iid-11.8.0.aar
AndroidManifest.xml: <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" />
./Plugins/Android/com.google.android.gms.play-services-iid-license-11.8.0.aar
...
Run Code Online (Sandbox Code Playgroud)
文件名都以句点开头。因此,我可以看到,例如,onesignal-unity.aar 设置了几个权限,搜索了几个 .jar 文件,其中没有权限,并且一些播放服务库指定了权限。
如果我需要更改一个库,我可以将 .aar 重命名为 .zip,提取它,编辑它,压缩它,然后将它重命名回来。(更改库内的权限不一定是明智的,但有可能。)
我对此没有任何补充;如上所述,如果您使用麦克风 API,Unity 会为您添加权限,以便您的应用程序正常运行。
但是,我后来意识到您可以执行以下操作:
| 归档时间: |
|
| 查看次数: |
3736 次 |
| 最近记录: |