真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android應(yīng)用的權(quán)限,安卓所有權(quán)限

Android應(yīng)用程序獲取system權(quán)限

支持原作者 :

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、瀘州ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的瀘州網(wǎng)站制作公司

軟硬件環(huán)境

ubuntu 14.04

Android studio2.1.2

Android 5.1.1

前言

一般的Android應(yīng)用程序,在安裝后,程序只能訪問(wèn)/data/data/${程序包名}下的數(shù)據(jù),如常見(jiàn)的SharedPreferences、database等。

而如果想讓app訪問(wèn)其它地方的資源時(shí),就必須要獲取更高的權(quán)限,像system或者root。本文完成system權(quán)限的獲取,實(shí)際上一般的應(yīng)用有system的權(quán)限基本上也夠了。

修改apk內(nèi)的AndroidManifest.xml

在app中的AndroidManifest.xml文件中的manifest標(biāo)簽中加入

android:sharedUserId="android.uid.system"

APP工程生成apk文件

android studio或者eclipse自動(dòng)就幫你生成好了

給apk文件進(jìn)行簽名

這里分兩種情況,一種是廠商,有android系統(tǒng)源碼,既可以把a(bǔ)pp源碼導(dǎo)入到android源碼中,也可以單獨(dú)完成簽名。第二種是你僅僅是做應(yīng)用的,拿不到廠商的source code,而且

這種情況也相當(dāng)普遍,怎么辦?別著急,我們今天就來(lái)解決這個(gè)問(wèn)題。

簽名需要的幾個(gè)文件

這個(gè)你必須找廠商要,signapk.jar、platform.x509.pem、platform.pk8,如果你有source code,signapk.jar存放在prebuilts/sdk/tools/,platform.* 兩個(gè)key文件存放在build/target/product/security/下

簽名具體命令

java -jar signapk.jar platform.x509.pem platform.pk8 unsigned.apk signed.apk

制作新的image文件

如果你的應(yīng)用需要預(yù)置到android系統(tǒng)中,將signed.apk導(dǎo)入到android源碼目錄中(一般是out/target/product/${hardware}/system/app/下),編譯生成新的

system.img,再燒錄到目標(biāo)板中。如果不需要預(yù)置,那就直接adb install好了。

測(cè)試

待系統(tǒng)啟動(dòng)后adb shell到板子上,ls -l查看app安裝目錄(/data/data/${程序包名})的權(quán)限,看看是不是變成system:system了。

安卓系統(tǒng)手機(jī)如何設(shè)置軟件權(quán)限

若是使用vivo手機(jī),可以進(jìn)入設(shè)置--應(yīng)用與權(quán)限/更多設(shè)置--權(quán)限管理--權(quán)限中設(shè)置應(yīng)用的權(quán)限。

安卓手機(jī)軟件權(quán)限如何設(shè)置呀!

您可以通過(guò)以下步驟打開(kāi)手機(jī)軟件權(quán)限設(shè)置,并通過(guò)對(duì)此的設(shè)置對(duì)手機(jī)進(jìn)行權(quán)限設(shè)置。

1、手機(jī)要開(kāi)啟或關(guān)閉一些軟件的權(quán)限,如關(guān)閉手機(jī)軟件調(diào)用攝像頭,開(kāi)啟手機(jī)軟件的錄音功能(如微信就需要開(kāi)啟錄音功能才可發(fā)語(yǔ)言)等,可以按以下,去設(shè)置管理手機(jī)軟件的權(quán)限。首先打開(kāi)手機(jī)設(shè)置。

2、點(diǎn)擊“全部設(shè)置”。

3、選擇“權(quán)限管理”點(diǎn)擊

4、現(xiàn)在就可以對(duì)手機(jī)上的各項(xiàng)權(quán)限進(jìn)行管理控制了,如手機(jī)的撥打電話權(quán)限、發(fā)送短信的權(quán)限、調(diào)用攝像頭的權(quán)限、啟用錄音的權(quán)限等等。

Android權(quán)限機(jī)制

我們知道 Android 應(yīng)用程序是沙箱隔離的,每個(gè)應(yīng)用都有一個(gè)只有自己具有讀寫權(quán)限的專用數(shù)據(jù)目錄。但是如果應(yīng)用要訪問(wèn)別人的組件或者一些設(shè)備上全局可訪問(wèn)的資源,這時(shí)候權(quán)限機(jī)制就能系統(tǒng)化地規(guī)范并強(qiáng)制各類應(yīng)用程序的行為準(zhǔn)則。

Android 安全性概覽

在 Android 中,一個(gè)權(quán)限,本質(zhì)上是一個(gè)字符串,一個(gè)可以表示執(zhí)行特定操作的能力的字符串。比如說(shuō):訪問(wèn) SD 卡的能力,訪問(wèn)通訊錄的能力,啟動(dòng)或訪問(wèn)一個(gè)第三方應(yīng)用中的組件的能力。 權(quán)限被授予了之后,首先會(huì)在內(nèi)存和本地中有記錄,這在調(diào)用系統(tǒng)binder服務(wù)和其他應(yīng)用組件時(shí)做鑒權(quán)依據(jù),比如調(diào)用系統(tǒng)binder服務(wù)時(shí)會(huì)通過(guò)Binder.getCallingUid()拿到調(diào)用者的Uid,而Uid一般都是與應(yīng)用包名一一對(duì)應(yīng)的,再拿這個(gè)Uid到PMS里去查這個(gè)應(yīng)用對(duì)應(yīng)的權(quán)限。 其次會(huì)按被授予的權(quán)限將應(yīng)用分到某個(gè)組。 可以參考

自定義權(quán)限的應(yīng)用場(chǎng)景在于限制其它應(yīng)用對(duì)本應(yīng)用四大組件的訪問(wèn)。具體用法可以參考

pm list permissions -f 命令可以詳細(xì)查看 Android 所有預(yù)定義的權(quán)限。

更詳細(xì)的權(quán)限信息參考

可以看到一個(gè)權(quán)限的信息包括:定義的包名、標(biāo)簽、描述、 權(quán)限組 和 保護(hù)級(jí)別 。

權(quán)限根據(jù)設(shè)備的功能或特性分為多個(gè)組。如果應(yīng)用已在相同權(quán)限組中被授予另一危險(xiǎn)權(quán)限,系統(tǒng)將立即授予該權(quán)限,如READ_CONTACTS和WRITE_CONTACTS。

SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 由于其特殊性,其申請(qǐng)方式與其它權(quán)限都不同。

其授予流程如下:

(關(guān)于 AppOpsManager 是什么可以參考: )

這里簡(jiǎn)要分析下ActivityCompat#requestPermissions的流程:

更詳細(xì)的權(quán)限授予流程源碼分析可以參考:

普通權(quán)限: 清單文件中聲明即可。

危險(xiǎn)權(quán)限: 方式一: pm grant application_package android.permission.CHANGE_CONFIGURATION 方式二:appops set application_package permission_num 0/1

appops可以授予的權(quán)限參考 android.app.AppOpsManager 中的聲明

系統(tǒng)簽名權(quán)限: 方式一:將app遷移到system/priv-app目錄中。 方式二:看不懂,參考

android 4.4 訪問(wèn)sd卡需要申請(qǐng)權(quán)限。 您的應(yīng)用在 Android 4.4 上運(yùn)行時(shí)無(wú)法讀取外部存儲(chǔ)空間上的共享文件,除非您的應(yīng)用具有 READ_EXTERNAL_STORAGE 權(quán)限。也就是說(shuō),沒(méi)有此權(quán)限,您無(wú)法再訪問(wèn) getExternalStoragePublicDirectory() 返回的目錄中的文件。但是,如果您僅需要訪問(wèn) getExternalFilesDir() 提供的您的應(yīng)用特有目錄,那么,您不需要 READ_EXTERNAL_STORAGE `權(quán)限。

android 6.0 運(yùn)行時(shí)權(quán)限。 此版本引入了一種新的權(quán)限模式,如今,用戶可直接在運(yùn)行時(shí)管理應(yīng)用權(quán)限。這種模式讓用戶能夠更好地了解和控制權(quán)限,同時(shí)為應(yīng)用開(kāi)發(fā)者精簡(jiǎn)了安裝和自動(dòng)更新過(guò)程。用戶可為所安裝的各個(gè)應(yīng)用分別授予或撤銷權(quán)限。 對(duì)于以 Android 6.0(API 級(jí)別 23)或更高版本為目標(biāo)平臺(tái)的應(yīng)用,請(qǐng)務(wù)必在運(yùn)行時(shí)檢查和請(qǐng)求權(quán)限。要確定您的應(yīng)用是否已被授予權(quán)限,請(qǐng)調(diào)用新增的 checkSelfPermission() 方法。要請(qǐng)求權(quán)限,請(qǐng)調(diào)用新增的 requestPermissions() 方法。即使您的應(yīng)用并不以 Android 6.0(API 級(jí)別 23)為目標(biāo)平臺(tái),您也應(yīng)該在新權(quán)限模式下測(cè)試您的應(yīng)用。 如需了解有關(guān)在您的應(yīng)用中支持新權(quán)限模式的詳情,請(qǐng)參閱 使用系統(tǒng)權(quán)限 。如需了解有關(guān)如何評(píng)估新模式對(duì)應(yīng)用的影響的提示,請(qǐng)參閱 權(quán)限最佳做法 。

android 7.+ 應(yīng)用間共享文件要使用FileProvider。 對(duì)于面向 Android 7.0 的應(yīng)用,Android 框架執(zhí)行的 StrictMode API 政策禁止在您的應(yīng)用外部公開(kāi) 。如果一項(xiàng)包含文件 URI 的 intent 離開(kāi)您的應(yīng)用,則應(yīng)用出現(xiàn)故障,并出現(xiàn) FileUriExposedException 異常。 要在應(yīng)用間共享文件,您應(yīng)發(fā)送一項(xiàng) content:// URI,并授予 URI 臨時(shí)訪問(wèn)權(quán)限。進(jìn)行此授權(quán)的最簡(jiǎn)單方式是使用 FileProvider `類。如需了解有關(guān)權(quán)限和共享文件的詳細(xì)信息,請(qǐng)參閱 共享文件 。

android 8.+

同一權(quán)限組的權(quán)限在被授予了之后也需要顯式的再申請(qǐng)一次。

在 Android 8.0 之前,如果應(yīng)用在運(yùn)行時(shí)請(qǐng)求權(quán)限并且被授予該權(quán)限,系統(tǒng)會(huì)錯(cuò)誤地將屬于同一權(quán)限組并且在清單中注冊(cè)的其他權(quán)限也一起授予應(yīng)用。 對(duì)于針對(duì) Android 8.0 的應(yīng)用,此行為已被糾正。系統(tǒng)只會(huì)授予應(yīng)用明確請(qǐng)求的權(quán)限。然而,一旦用戶為應(yīng)用授予某個(gè)權(quán)限,則所有后續(xù)對(duì)該權(quán)限組中權(quán)限的請(qǐng)求都將被自動(dòng)批準(zhǔn)。 例如,假設(shè)某個(gè)應(yīng)用在其清單中列出 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 。應(yīng)用請(qǐng)求 READ_EXTERNAL_STORAGE ,并且用戶授予了該權(quán)限。如果該應(yīng)用針對(duì)的是 API 級(jí)別 24 或更低級(jí)別,系統(tǒng)還會(huì)同時(shí)授予 WRITE_EXTERNAL_STORAGE ,因?yàn)樵摍?quán)限也屬于同一 STORAGE 權(quán)限組并且也在清單中注冊(cè)過(guò)。如果該應(yīng)用針對(duì)的是 Android 8.0,則系統(tǒng)此時(shí)僅會(huì)授予 READ_EXTERNAL_STORAGE ;不過(guò),如果該應(yīng)用后來(lái)又請(qǐng)求 WRITE_EXTERNAL_STORAGE ,則系統(tǒng)會(huì)立即授予該權(quán)限,而不會(huì)提示用戶。

android 9

隱私權(quán)限變更。

為了增強(qiáng)用戶隱私,Android 9 引入了若干行為變更,如限制后臺(tái)應(yīng)用訪問(wèn)設(shè)備傳感器、限制通過(guò) Wi-Fi 掃描檢索到的信息,以及與通話、手機(jī)狀態(tài)和 Wi-Fi 掃描相關(guān)的新權(quán)限規(guī)則和權(quán)限組。

android 10

隱私權(quán)變更。

外部存儲(chǔ)訪問(wèn)權(quán)限范圍限定為應(yīng)用文件和媒體,在后臺(tái)運(yùn)行時(shí)訪問(wèn)設(shè)備位置信息需要權(quán)限,針對(duì)從后臺(tái)啟動(dòng) Activity 的限制等。

android 11

隱私權(quán)限變更。

更詳細(xì)的版本變更請(qǐng)參考

安卓手機(jī)權(quán)限管理在哪

1)在桌面打開(kāi)手機(jī)【設(shè)置】功能,如圖所示;

2)下滑【設(shè)置】選項(xiàng),找到【應(yīng)用管理】處的【授權(quán)管理】點(diǎn)擊并打開(kāi),如圖所示;

3)選擇并打開(kāi)【授權(quán)管理】處的【應(yīng)用權(quán)限管理】,如圖所示;

4)點(diǎn)擊上方的【權(quán)限管理】,如圖所示;

5)在【權(quán)限管理】處修改權(quán)限即可,如圖所示。

Android的權(quán)限都有哪些

(一)linux文件系統(tǒng)上的權(quán)限

-rwxr-x--x system system 4156 2010-04-30 16:13 test.apk

代表的是相應(yīng)的用戶/用戶組及其他人對(duì)此文件的訪問(wèn)權(quán)限,與此文件運(yùn)行起來(lái)具有的權(quán)限完全不相關(guān)。

比如上面的例子只能說(shuō)明system用戶擁有對(duì)此文件的讀寫執(zhí)行權(quán)限;system組的用戶對(duì)此文件擁有讀、執(zhí)行權(quán)限;其他人對(duì)此文件只具有執(zhí)行權(quán)限。

而test.apk運(yùn)行起來(lái)后可以干哪些事情,跟這個(gè)就不相關(guān)了。

千萬(wàn)不要看apk文件系統(tǒng)上屬于system/system用戶及用戶組,或者root/root用戶及用戶組,就認(rèn)為apk具有system或root權(quán)限

(二)Android的權(quán)限規(guī)則

(1)Android中的apk必須簽名

這種簽名不是基于權(quán)威證書的,不會(huì)決定某個(gè)應(yīng)用允不允許安裝,而是一種自簽名證書。

重要的是,android系統(tǒng)有的權(quán)限是基于簽名的。比如:system等級(jí)的權(quán)限有專門對(duì)應(yīng)的簽名,簽名不對(duì),權(quán)限也就獲取不到。

默認(rèn)生成的APK文件是debug簽名的。

獲取system權(quán)限時(shí)用到的簽名,見(jiàn):如何使Android應(yīng)用程序獲取系統(tǒng)權(quán)限

(2)基于UserID的進(jìn)程級(jí)別的安全機(jī)制

大家都知道,進(jìn)程有獨(dú)立的地址空間,進(jìn)程與進(jìn)程間默認(rèn)是不能互相訪問(wèn)的,是一種很可靠的保護(hù)機(jī)制。

Android通過(guò)為每一個(gè)安裝在設(shè)備上的包(apk)分配唯一的linux userID來(lái)實(shí)現(xiàn),名稱為"app_"加一個(gè)數(shù)字,比如app_43

不同的UserID,運(yùn)行在不同的進(jìn)程,所以apk之間默認(rèn)便不能相互訪問(wèn)。

Android提供了如下的一種機(jī)制,可以使兩個(gè)apk打破前面講的這種壁壘。

在AndroidManifest.xml中利用sharedUserId屬性給不同的package分配相同的userID,通過(guò)這樣做,兩個(gè)package可以被當(dāng)做同一個(gè)程序,

系統(tǒng)會(huì)分配給兩個(gè)程序相同的UserID。當(dāng)然,基于安全考慮,兩個(gè)package需要有相同的簽名,否則沒(méi)有驗(yàn)證也就沒(méi)有意義了。

(這里補(bǔ)充一點(diǎn):并不是說(shuō)分配了同樣的UserID,兩程序就運(yùn)行在同一進(jìn)程, 下面為PS指令摘取的,

顯然,system、app_2分別對(duì)應(yīng)的兩個(gè)進(jìn)程的PID都不同,不知Android到底是怎樣實(shí)現(xiàn)它的機(jī)制的)

User PID PPID

system 953 883 187340 55052 ffffffff afe0cbcc S system_server

app_2 1072 883 100264 19564 ffffffff afe0dcc4 S com.android.inputmethod.

system 1083 883 111808 23192 ffffffff afe0dcc4 S android.process.omsservi

app_2 1088 883 156464 45720 ffffffff afe0dcc4 S android.process.acore

(3)默認(rèn)apk生成的數(shù)據(jù)對(duì)外是不可見(jiàn)的

實(shí)現(xiàn)方法是:Android會(huì)為程序存儲(chǔ)的數(shù)據(jù)分配該程序的UserID。

借助于Linux嚴(yán)格的文件系統(tǒng)訪問(wèn)權(quán)限,便實(shí)現(xiàn)了apk之間不能相互訪問(wèn)似有數(shù)據(jù)的機(jī)制。

例:我的應(yīng)用創(chuàng)建的一個(gè)文件,默認(rèn)權(quán)限如下,可以看到只有UserID為app_21的程序才能讀寫該文件。

-rw------- app_21 app_21 87650 2000-01-01 09:48 test.txt

如何對(duì)外開(kāi)放?

1 使用MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE 標(biāo)記。

When creating a new file with getSharedPreferences(String, int), openFileOutput(String, int), or openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory), you can use the MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE flags to allow any other package to read/write the file. When setting these flags, the file is still owned by your application, but its global read and/or write permissions have been set appropriately so any other application can see it.

(4)AndroidManifest.xml中的顯式權(quán)限聲明

Android默認(rèn)應(yīng)用是沒(méi)有任何權(quán)限去操作其他應(yīng)用或系統(tǒng)相關(guān)特性的,應(yīng)用在進(jìn)行某些操作時(shí)都需要顯式地去申請(qǐng)相應(yīng)的權(quán)限。

一般以下動(dòng)作時(shí)都需要申請(qǐng)相應(yīng)的權(quán)限:

A particular permission may be enforced at a number of places during your program's operation:

At the time of a call into the system, to prevent an application from executing certain functions.

When starting an activity, to prevent applications from launching activities of other applications.

Both sending and receiving broadcasts, to control who can receive your broadcast or who can send a broadcast to you.

When accessing and operating on a content provider.

Binding or starting a service.

在應(yīng)用安裝的時(shí)候,package installer會(huì)檢測(cè)該應(yīng)用請(qǐng)求的權(quán)限,根據(jù)該應(yīng)用的簽名或者提示用戶來(lái)分配相應(yīng)的權(quán)限。

在程序運(yùn)行期間是不檢測(cè)權(quán)限的。如果安裝時(shí)權(quán)限獲取失敗,那執(zhí)行就會(huì)出錯(cuò),不會(huì)提示用戶權(quán)限不夠。

大多數(shù)情況下,權(quán)限不足導(dǎo)致的失敗會(huì)引發(fā)一個(gè) SecurityException, 會(huì)在系統(tǒng)log(system log)中有相關(guān)記錄。

(5)權(quán)限繼承/UserID繼承

當(dāng)我們遇到apk權(quán)限不足時(shí),我們有時(shí)會(huì)考慮寫一個(gè)linux程序,然后由apk調(diào)用它去完成某個(gè)它沒(méi)有權(quán)限完成的事情,很遺憾,這種方法是行不通的。

前面講過(guò),android權(quán)限是經(jīng)營(yíng)在進(jìn)程層面的,也就是說(shuō)一個(gè)apk應(yīng)用啟動(dòng)的子進(jìn)程的權(quán)限不可能超越其父進(jìn)程的權(quán)限(即apk的權(quán)限),

即使單獨(dú)運(yùn)行某個(gè)應(yīng)用有權(quán)限做某事,但如果它是由一個(gè)apk調(diào)用的,那權(quán)限就會(huì)被限制。

實(shí)際上,android是通過(guò)給子進(jìn)程分配父進(jìn)程的UserID實(shí)現(xiàn)這一機(jī)制的。

(三)常見(jiàn)權(quán)限不足問(wèn)題分析

首先要知道,普通apk程序是運(yùn)行在非root、非system層級(jí)的,也就是說(shuō)看要訪問(wèn)的文件的權(quán)限時(shí),看的是最后三位。

另外,通過(guò)system/app安裝的apk的權(quán)限一般比直接安裝或adb install安裝的apk的權(quán)限要高一些。

言歸正傳,運(yùn)行一個(gè)android應(yīng)用程序過(guò)程中遇到權(quán)限不足,一般分為兩種情況:

(1)Log中可明顯看到權(quán)限不足的提示。

此種情況一般是AndroidManifest.xml中缺少相應(yīng)的權(quán)限設(shè)置,好好查找一番權(quán)限列表,應(yīng)該就可解決,是最易處理的情況。

有時(shí)權(quán)限都加上了,但還是報(bào)權(quán)限不足,是什么情況呢?

Android系統(tǒng)有一些API及權(quán)限是需要apk具有一定的等級(jí)才能運(yùn)行的。

比如 SystemClock.setCurrentTimeMillis()修改系統(tǒng)時(shí)間,WRITE_SECURE_SETTINGS權(quán)限好像都是需要有system級(jí)的權(quán)限才行。

也就是說(shuō)UserID是system.

(2)Log里沒(méi)有報(bào)權(quán)限不足,而是一些其他Exception的提示,這也有可能是權(quán)限不足造成的。

比如:我們常會(huì)想讀/寫一個(gè)配置文件或其他一些不是自己創(chuàng)建的文件,常會(huì)報(bào)java.io.FileNotFoundException錯(cuò)誤。

系統(tǒng)認(rèn)為比較重要的文件一般權(quán)限設(shè)置的也會(huì)比較嚴(yán)格,特別是一些很重要的(配置)文件或目錄。

-r--r----- bluetooth bluetooth 935 2010-07-09 20:21 dbus.conf

drwxrwx--x system system 2010-07-07 02:05 data

dbus.conf好像是藍(lán)牙的配置文件,從權(quán)限上來(lái)看,根本就不可能改動(dòng),非bluetooth用戶連讀的權(quán)利都沒(méi)有。

/data目錄下存的是所有程序的私有數(shù)據(jù),默認(rèn)情況下android是不允許普通apk訪問(wèn)/data目錄下內(nèi)容的,通過(guò)data目錄的權(quán)限設(shè)置可知,其他用戶沒(méi)有讀的權(quán)限。

所以adb普通權(quán)限下在data目錄下敲ls命令,會(huì)得到opendir failed, Permission denied的錯(cuò)誤,通過(guò)代碼file.listfiles()也無(wú)法獲得data目錄下的內(nèi)容。


當(dāng)前標(biāo)題:android應(yīng)用的權(quán)限,安卓所有權(quán)限
分享地址:http://weahome.cn/article/dsdcpcg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部