2016-12-15 81 views
1

背景:我正在嘗試新的Tiles和TileService,並決定從CyanogenMod.重新創建USB Tethering磁貼我使用反射訪問連接管理器的方法。權限不是多變的權限類型

問題:一個這樣的方法是導致java.lang.SecurityException: You either need MANAGE_USERS or CREATE_USERS permission to: query user

所以我加了權限清單,但我每次使用pm grant返回「權限是不是一個多變的許可類型」

時間isTetheringSupported()根據this我用調試密鑰簽名時不會出現這個錯誤。

問題:我該如何獲得這些權限?

+0

和你簽了嗎? –

+0

@KhalilM是的,我沒有 – Bhav

回答

1

UPDATE: 通過Xposed有可能鉤到PackageManger並刪除下面的檢查,然後做pm grant...成功有求必應權限。如果有人看到這個,並需要幫助,請在下面評論我會幫助你。

OLD ANSWER 此代碼源

boolean isDevelopment = 
      ((bp.protectionLevel&PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0); 

不檢查,如果你的應用程序是在開發模式。它會檢查您請求的權限是否具有protectionLevel屬性(在清單中設置)設置爲development。 而你正試圖獲得許可似乎沒有可能通過此檢查清單中的聲明的任何元素:

if (!isNormal && !isDangerous && !isDevelopment) { 
     throw new SecurityException("Permission " + bp.name 
       + " is not a changeable permission type"); 
    } 

只是在此與其他權限跌跌撞撞。似乎有可悲的沒有辦法得到它。

+0

我找不到有關'development'保護級別的任何信息,但事實證明'CREATE_USERS'和'MANAGE_USERS'的保護級別設置爲'signature',我應該可以使用' platform.x509.pem'和'platform.pk8' [here](https://github.com/android/platform_build/tree/master/target/product/security)來獲取權限。 [源代碼](https://stackoverflow.com/questions/3635101/how-to-sign-android-app-with-system-signature) – Bhav

+0

@Bhav是的那些2權限不''發展'保護,所以你不能通過adb訪問它們,例如上面的if語句中的檢查會引發你異常。如果保護級別爲「簽名」,則只能在附加的帖子中授予該權限。 –