2016-12-02 51 views
5

注:這個問題是特定於Unity3D如何找到一個權限的來源在Unity Android的

我在Unity項目一個非常乾淨的Android清單文件Plugins/Android/文件夾下沒有<uses-permissions/>標籤都沒有。我相信最終APK中的某些權限來自Android Player設置,例如READ_EXTERNAL_STORAGE。在我的裝備VR項目中,我看到下面的最終清單添加的行可以在Temp/StagingArea/訪問:

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-feature android:name="android.hardware.microphone" android:required="false" /> 

現在,這肯定是從我在我的項目中的任一插件來(我有很多的插件)。

我的應用正從Oculus公司說

您的應用要求用戶過多權限的用戶使用權限 不適當的拒絕。

我找到了一個解決辦法here,但我不想做這樣的事情,因爲這可能會導致應用程序拒絕一次。

所以

有沒有一種方法,我可以找出這個權限來自哪裏?

如何找出我的腳本中是否有一些代碼導致統一包含此權限?

感謝

+0

對不起,我不能訪問該鏈接,你能發佈鏈接到問題不是答案? –

+0

@NikaKasradze現在嘗試 –

回答

2

將統一由eriQue of Unity Technologies提到這是爲了防止代碼故障,意外行爲在編譯時間上飛添加權限爲您服務。

你可以使用一個工具,如本Apk-decompiler來看看你的新清單,以及許可本使用。基於此,您可能會尋找某些可能觸發這些權限的功能。

某些功能,例如isGeniune,將需要若干權限,因爲它會使用驗證對外部服務器。

另外,您也可以替換反編譯APK您的清單,手動更改了清單與一個預期,而辭職了。這是一些更加煩人的工作,但是如果適當的錯誤日誌記錄可以加快跟蹤有問題的功能的進程。

更新

正如我在下面的評論中提到的爲好。沒有真正的方法來查明功能。但是,快速的檢查列表不能傷害,但會需要一些工作

  • 你使用任何外部服務?

很多外部服務,認爲谷歌的,Twitter的,Facebook的API和工具,需要額外的權限。通常這些與存儲/網絡相關,但取決於工具/ api的目標,它可能還有更多。

嘗試使用和不使用工具/ apis來構建APK以查看是否有任何區別。

  • 您使用的是統一廣告嗎?

統一廣告利用了3分權限本身,和舊版本仍可能甚至利用5.如果您使用的是他們的廣告,那麼你將不得不採取這些是理所當然的。

  • 您是否禁用統一數據?

曾經看着那些花哨stats統一似乎可以提供?那麼,除非你禁用了這個,否則你很可能也會參與其中。

這些統計數據需要多個權限,因爲手機將在硬件級別進行分析以及在提供的統計數據中看到。

  • 你真的使用所有的API /工具/資產要求是什麼?

你可能已經包含了一些API,工具或者只是來自外部方的任何dll,可能包括或不包括需要依賴關係的代碼。正如通常那些不是100%被清理的一樣,並且可能包括與其功能無關的許可要求,或者包括您所需要的功能。

說,一些廣告服務可能要訪問用戶的麥克風。但是因爲您沒有使用他們的「OMG聲音響應分析」功能,所以您不需要此權限。

這些權限可以手動刪除,就像我之前在我的回答中所描述的那樣。或者通過某種形式的自動化,例如post build marked editor腳本。

問題具體:

RECORD_AUDIO許可,使其進入Android清單文件,如果有任何項目腳本來Microphone庫的調用。腳本是否存在於場景中並不重要。在這種特定情況下,如果Oculus Platform SDK被導入到項目中(這是商店需求),那麼使用Microphone庫的腳本很少。因此,如果您不使用任何錄音功能,例如語音輸入,只需刪除OculusPlatform/Scripts下的以下文件:MicrophoneInput.cs,IMicrophone.cs,MicrophoneInputNative.cs

+0

感謝您的努力。我已經知道所有這些東西,並在我的問題中提到了它的大部分內容。我不需要使用任何反編譯器來訪問已經在項目目錄中的Temp/StagingArea文件夾中的最終清單。請在帖子末尾回答我的兩個問題。我正在具體討論提及的權限的來源。謝謝:) –

+0

我正在尋找一個持久的解決方案。刪除權限可能會破壞一些插件,我不希望這樣。我相信我沒有做任何錄音或使用麥克風。那麼爲什麼我甚至需要在我的項目中的那部分代碼。我最好刪除權限的來源而不是權限。 –

+0

@UmairM我明白你會想要一個持久的解決方案,但是爲了確定它並沒有。但是,如果需要,可以使用'[PostBuild]'事件以編程方式替換清單。在經過一些體力勞動之後,使它成爲一個持久的解 –

1

@ mx-d是對的。我只想添加另一種解決此問題的方法:在構建設置中,您可以勾選將生成Android Studio項目的Google Android Project。從那裏你可以使用Android Studio的清單合併工具來覆蓋權限。

問題1:找到哪個庫引入額外權限的唯一方法是逐個刪除庫,構建項目並檢查.apk清單。不幸的是,統一性不如Android Studio生產明智。

問題2:在Unity通過代碼不能添加權限(除非它是專爲拼接起來清單文件而設計的自定義編輯器腳本)

+0

請在MX-D的回答下看看我的意見。在我的第二個問題中,我特別談論需要特定權限的代碼。例如'isGeniune'或'Application.internetReachability' –