Android 11適配方案變更及適配攻略

總算開始了Android 11的適配作業(yè)。記載一下,供需求的人參看蝶棋。

1. 預(yù)備工作

老規(guī)矩,首要將咱們項(xiàng)目中的 targetSdkVersion 改為 30忽妒⊥嫒梗或許運(yùn)用兼容性調(diào)試東西,后邊我會提到段直。

2. 存儲機(jī)制更新

Scoped Storage(分區(qū)存儲)

詳細(xì)適配辦法和上一年的Android 10 適配攻略中的沒有太大差異吃溅。

不過需求留神的是,運(yùn)用targetSdkVersion >= 30鸯檬,強(qiáng)制實(shí)施分區(qū)存儲機(jī)制决侈。之前在AndroidManifest.xml中增加 android:requestLegacyExternalStorage="true"的適配辦法已不起效果。

還有一個改變:Android 11 容許運(yùn)用除 MediaStore API 之外的 API 經(jīng)過文件途徑直接拜訪同享存儲空間中的媒體文件喧务。其間包括:

  • File API赖歌。
  • 原生庫枉圃,例如 fopen()

假定你之前沒有適配Android 10庐冯,這一點(diǎn)對你來說是個好音訊孽亲。Android 10在AndroidManifest.xml中增加 android:requestLegacyExternalStorage="true"來適配,Android 11上直接運(yùn)用File API拜訪媒體文件展父。不得不說墨林,等等黨的成功?

不過犯祠,運(yùn)用原始文件途徑直接拜訪同享存儲空間中的媒體文件會重定向到 MediaStore API旭等,這次重定向會構(gòu)成功用影響(隨機(jī)讀寫慢一倍左右)。而且直接運(yùn)用原始文件途徑衡载,并不會比運(yùn)用 MediaStore API 有更多優(yōu)勢搔耕,因而官方強(qiáng)烈主張直接運(yùn)用 MediaStore API。

MANAGE_EXTERNAL_STORAGE

當(dāng)然還有一種簡略粗暴的適配辦法痰娱,獲取外部存儲辦理權(quán)限弃榨。假定你的運(yùn)用是手機(jī)管家、文件辦理器這類需求拜訪大量文件的app梨睁,能夠央求MANAGE_EXTERNAL_STORAGE權(quán)限鲸睛,將用戶引導(dǎo)至體系設(shè)置頁面翻開。代碼如下:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />

public static void checkStorageManagerPermission(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R &&
!Environment.isExternalStorageManager()) {
Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}

需求留神的是即便你有了MANAGE_EXTERNAL_STORAGE權(quán)限坡贺,也無法拜訪Android/data/目錄下的文件官辈。

關(guān)于MANAGE_EXTERNAL_STORAGE權(quán)限,國內(nèi)運(yùn)用應(yīng)該沒有什么影響遍坟∪冢可是在Google Play上需求說明為什么已有的SAFMediaStore不滿足你的運(yùn)用需求,審核經(jīng)過才容許上架運(yùn)用愿伴。所以一般狀況下肺魁,我個人不推薦你為了適配簡略,直接央求運(yùn)用MANAGE_EXTERNAL_STORAGE權(quán)限隔节。

其他細(xì)節(jié)改動見文檔:Android 11 中的存儲機(jī)制更新鹅经。

相關(guān)api改動及運(yùn)用推薦郭霖大神的這篇:Android 11新特性,Scoped Storage又有了新花樣怎诫。

存儲拜訪結(jié)構(gòu) (SAF)改動

Android 11對SAF增加以下束縛:

  • 運(yùn)用 ACTION_OPEN_DOCUMENT_TREEACTION_OPEN_DOCUMENT瘾晃,無法閱讀到Android/data/Android/obb/目錄及其悉數(shù)子目錄。
  • 運(yùn)用 ACTION_OPEN_DOCUMENT_TREE無法授權(quán)拜訪存儲根目錄刽虹、Download文件夾酗捌。

REQUEST_INSTALL_PACKAGES

在8.0的適配中呢诬,咱們設(shè)備apk包之前需求央求“設(shè)備不知道來歷運(yùn)用”的權(quán)限涌哲。一般來說初次是跳轉(zhuǎn)到授權(quán)頁面讓用戶手動翻開胖缤,然后回來app進(jìn)行設(shè)備。

在Android 11中當(dāng)用戶打開“設(shè)備不知道來歷運(yùn)用”的權(quán)限阀圾,app就會被殺死哪廓。該行為與強(qiáng)制分區(qū)存儲有關(guān),由于持有 REQUEST_INSTALL_PACKAGES 權(quán)限的運(yùn)用能夠拜訪其他運(yùn)用的Android/obb 目錄初烘。

好在用戶公布權(quán)限之后涡真,盡管app會被殺死,可是設(shè)備頁面仍然會彈出肾筐。

現(xiàn)在關(guān)于這一改動我沒有發(fā)現(xiàn)能夠適配處理的辦法哆料,詳細(xì)介紹見:Android 11特性調(diào)整:設(shè)備外部來歷運(yùn)用需求重啟APP

3.權(quán)限改變

單次權(quán)限授權(quán)

從 Android 11 開始,每當(dāng)運(yùn)用央求與方位信息吗铐、麥克風(fēng)或攝像頭相關(guān)的權(quán)限時东亦,面向用戶的權(quán)限對話框會包括僅限這一次選項(xiàng)。假定用戶在對話框中挑選此選項(xiàng)唬渗,體系會向運(yùn)用公布暫時的單次授權(quán)典阵。

單次權(quán)限授權(quán)的運(yùn)用能夠在一段時間內(nèi)拜訪相關(guān)數(shù)據(jù),詳細(xì)時間取決于運(yùn)用的行為和用戶的操作:

  • 當(dāng)運(yùn)用的 Activity 可見時镊逝,運(yùn)用能夠拜訪相關(guān)數(shù)據(jù)壮啊。
  • 假定用戶將運(yùn)用轉(zhuǎn)為后臺作業(yè),運(yùn)用能夠在短時間內(nèi)繼續(xù)拜訪相關(guān)數(shù)據(jù)撑蒜。
  • 假定您在 Activity 可見時主張了一項(xiàng)前臺服務(wù)歹啼,而且用戶隨后將您的運(yùn)用轉(zhuǎn)到后臺,那么您的運(yùn)用能夠繼續(xù)拜訪相關(guān)數(shù)據(jù)座菠,直到該前臺服務(wù)中止染突。
  • 假定用戶撤消單次授權(quán)(例如在體系設(shè)置中撤消),不管您是否主張了前臺服務(wù)辈灼,運(yùn)用都無法拜訪相關(guān)數(shù)據(jù)份企。與任何權(quán)限相同,假定用戶撤消了運(yùn)用的單次授權(quán)巡莹,運(yùn)用進(jìn)程就會中止司志。

當(dāng)用戶下次翻開運(yùn)用而且運(yùn)用中的某項(xiàng)功用央求拜訪方位信息、麥克風(fēng)或攝像頭時降宅,體系會再次提示用戶公布權(quán)限骂远。

假定你之前就是運(yùn)用權(quán)限時才央求相關(guān)權(quán)限,那么這一改動關(guān)于你的運(yùn)用沒有影響腰根。

央求方位權(quán)限

這部分在Android 10的適配有過調(diào)整激才,其時規(guī)則如下:

央求ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION權(quán)限標(biāo)明在前臺時具有拜訪設(shè)備方位信息的權(quán)限。在央求彈框中,挑選“一向容許”標(biāo)明前后臺都能夠獲取方位信息瘸恼,挑選“僅在運(yùn)用運(yùn)用進(jìn)程中容許”只標(biāo)明具有前臺的權(quán)限劣挫。

在Android 11中,央求彈框中取消了“一向容許”這一選項(xiàng)东帅。也就是說默許不會公布你后臺拜訪設(shè)備方位信息的權(quán)限压固。假定檢驗(yàn)央求ACCESS_BACKGROUND_LOCATION權(quán)限的一同央求任何其他權(quán)限,體系會拋出失常,不會向運(yùn)用公布其間的任一權(quán)限。

官方給出的適配主張及原因如下:

主張運(yùn)用對方位權(quán)限實(shí)施遞加央求聂薪,先央求前臺方位信息拜訪權(quán)限冰沙,再央求后臺方位信息拜訪權(quán)限。實(shí)施遞加央求能夠?yàn)橛脩艄┙o更大的控制權(quán)和透明度,由于他們能夠更好地了解運(yùn)用中的哪些功用需求后臺方位信息拜訪權(quán)限。

總結(jié)一下得出兩點(diǎn):

  • 先央求前臺方位信息拜訪權(quán)限,再央求后臺方位信息拜訪權(quán)限矿咕。
  • 單獨(dú)央求后臺方位信息拜訪權(quán)限,不要與其他權(quán)限一同央求狼钮。

這兒還需求留神不同方針途徑運(yùn)用在Android 11上的表現(xiàn):

  • Android 10 為方針途徑的運(yùn)用
    容許一同拜訪前后臺的方位信息權(quán)限碳柱,但相同不會有“一向容許”這一選項(xiàng)。
  1. 沒有前后臺的方位信息權(quán)限時:

  1. 有前臺的方位信息權(quán)限時:

  • Android 11 為方針途徑的運(yùn)用
  1. 沒有前后臺的方位信息權(quán)限時熬芜,只能先央求前臺的方位信息權(quán)限:

  1. 有前臺的方位信息權(quán)限莲镣,央求后臺的方位信息時體系會跳轉(zhuǎn)到下面的設(shè)置頁面。


挑選“一向容許”標(biāo)明具有前后臺方位信息拜訪權(quán)限涎拉,假定用戶回絕兩次運(yùn)用定位拜訪央求(直接回來等)瑞侮,后邊央求相同權(quán)限都會被直接提示央求失利。(這兒就需求咱們給用戶以引導(dǎo)了)

這兒解釋一下“回絕兩次”鼓拧,這是Android 11 上增加的權(quán)限對話框的可見性半火,從前咱們點(diǎn)擊了“不再問詢”標(biāo)明回絕授權(quán)。現(xiàn)在還包括相似上面這種轉(zhuǎn)到體系設(shè)置季俩,然后點(diǎn)回來按鈕钮糖,也算是回絕授權(quán)。當(dāng)然酌住,用戶按回來按鈕封閉權(quán)限對話框店归,此操作不算。

總結(jié)一下酪我,與Android 10的差異就是將后臺權(quán)限的央求分離了出來消痛,增加了用戶“回絕”的條件,避免了運(yùn)用重復(fù)央求用戶已回絕的權(quán)限都哭。

軟件包可見性

軟件包可見性是Android 11上提高體系隱私安全性的一個新特性秩伞。它的效果是束縛app隨意獲取其他app的信息和設(shè)備狀況逞带。避免病毒軟件、間諜軟件利用纱新,引發(fā)網(wǎng)絡(luò)垂釣展氓、用戶設(shè)備信息走漏等安全事情。

獲取主動可見運(yùn)用的列表怒炸,能夠?qū)嵤┲噶?code>adb shell dumpsys package queries带饱,找到 forceQueryable 部分毡代。下面是在vivo iqoo手機(jī)的實(shí)施效果阅羹。

Queries:
system apps queryable: false
forceQueryable:
[com.android.BBKCrontab,com.vivo.fingerprint,com.vivo.epm,com.vivo.abe,com.vivo.fingerprintengineer,com.vivo.contentcatcher,com.vivo.floatingball,com.vivo.agent,com.vivo.nightpearl,android,com.wapi.wapicertmanage,com.vivo.vms,co
m.android.providers.settings,com.vivo.upslide,com.vivo.assistant,com.vivo.vivokaraoke,com.vivo.fingerprintui,com.android.wallpaperbackup,com.bbk.facewake,com.vivo.faceunlock,com.vivo.doubleinstance,com.vivo.audiofx,com.iqoo.powersav
ing,com.bbk.SuperPowerSave,com.vivo.vibrator4d,com.vivo.smartunlock,com.vivo.globalanimation,com.vivo.appfilter,com.vivo.voicewakeup,com.vivo.minscreen,com.android.bbklog,com.mobile.cos.iroaming,com.vivo.networkstate,com.vivo.daemon
Service,com.vivo.smartshot,com.vivo.vtouch,com.android.networkstack.tethering.inprocess,com.android.localtransport,com.vivo.pem,com.vivo.wifiengineermode,com.android.server.telecom,com.vivo.gamecube,com.vivo.aiengine,com.vivo.multin
lp,com.vivo.smartmultiwindow,com.vivo.permissionmanager,com.qti.diagservices,com.vivo.bsptest,com.qti.snapdragon.qdcm_ff,com.vivo.dr,com.vivo.sps,com.android.dynsystem,com.vivo.setupwizard,com.vivo.gamewatch,com.android.keychain,com
.vivo.faceui,com.android.networkstack.inprocess,com.android.location.fused,com.android.inputdevices,com.android.settings,com.iqoo.engineermode,com.vivo.fuelsummary]
[com.qualcomm.uimremoteserver,com.vivo.devicereg,com.qti.qualcomm.deviceinfo,com.volte.config,com.android.mms.service,com.android.ons,com.qualcomm.qcrilmsgtunnel,com.vivo.sim.contacts,com.qualcomm.qti.uimGbaApp,com.qualcomm.qti.
modemtestmode,com.android.stk,com.android.vendors.bridge.softsim,com.qualcomm.uimremoteclient,com.qti.qualcomm.datastatusnotification,com.qualcomm.qti.uim,com.android.phone,com.qualcomm.qti.dynamicddsservice,com.qualcomm.qti.telepho
nyservice,com.android.cellbroadcastservice,com.android.providers.telephony,com.qti.dpmserviceapp,com.android.incallui]
[com.android.vivo.tws.vivotws,com.android.bluetooth]
com.android.nfc
com.android.se
com.android.networkstack.permissionconfig
com.android.shell
com.android.providers.media.module
com.android.wifi.resources.overlay.common
com.android.theme.icon_pack.filled.themepicker
com.android.theme.icon_pack.circular.themepicker
com.android.server.telecom.overlay.common
......

能夠看到都是體系運(yùn)用包名,所以咱們的三方運(yùn)用默許是不行見的教寂。此項(xiàng)改動影響比較多的是共享支付一類需求與其他運(yùn)用交互的功用捏鱼。下面舉一個簡略的比如:


private static boolean hasActivity(Context context, Intent intent) {
PackageManager packageManager = context.getPackageManager();
return packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0;
}
public void test() {
Intent intent = new Intent();
intent.setClassName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");
Log.d("hasActivity:", hasActivity(this, intent) + "");
}

hasActivity辦法中經(jīng)過queryIntentActivities來判別此頁面是否存在±腋可是在targetSdkVersion >= 30中导梆,這些三方默許都是不行見的。所以都會回來false迂烁。相似辦法getInstalledPackages看尼、getPackageInfo也遭到相應(yīng)的束縛。

解決辦法很簡略盟步,在AndroidManifest.xml 中增加queries元素藏斩,里面增加需求可見的運(yùn)用包名。

<manifest package="com.example.app">
<queries>
<package android:name="com.tencent.mm" /&gt; <- 指定微信包名
</queries>
...
</manifest>

我在適配中用到的還有下面的包名却盘,咱們能夠按需增加:

<queries>
<!-- 微博 -->
<package android:name="com.sina.weibo" />
<!-- QQ -->
<package android:name="com.tencent.mobileqq" />
<!-- 支付寶 --&gt;
<package android:name="com.eg.android.AlipayGphone" />
<!-- AlipayHK -->
<package android:name="hk.alipay.wallet" />
</queries>

除了直接增加包名的辦法外狰域,咱們能夠按intent和provider來增加:

<manifest package="com.example.app">
&lt;queries>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/jpeg" />
</intent&gt;
<provider android:authorities="com.example.settings.files" />
</queries>
...
</manifest>

詳細(xì)的規(guī)則拜見:辦理軟件包可見性

當(dāng)然,還有一種簡略粗暴的辦法黄橘,能夠直接央求權(quán)限QUERY_ALL_PACKAGES兆览。假定你的運(yùn)用需求上架Google Play,那么或許要留神相關(guān)方針塞关。為了尊重用戶隱私抬探,主張?jiān)蹅兊倪\(yùn)用按正常作業(yè)所需的最小軟件包可見性來適配。

有一點(diǎn)需求說明一下帆赢,咱們?nèi)粘_\(yùn)用的startActivity 辦法不受體系軟件包可見性行為的影響驶睦,即便hasActivity為false,相同能夠跳轉(zhuǎn)匿醒。假定咱們在做跳轉(zhuǎn)前场航,進(jìn)行相似hasActivity的判別,那么會受影響廉羔。

最終需求留神的是溉痢,運(yùn)用queries元素需求Android Gradle 插件版別是 4.1及以上僻造,由于舊版其他插件并不兼容此元素,出現(xiàn)合并 manifest 的過錯孩饼。

前臺服務(wù)類型

Android 10中髓削,在前臺服務(wù)拜訪方位信息,需求在對應(yīng)的service中增加 location 服務(wù)類型镀娶。

相同的立膛,Android 11中,在前臺服務(wù)拜訪攝像頭或麥克風(fēng)梯码,需求在對應(yīng)的service中增加cameramicrophone 服務(wù)類型宝泵。

<manifest>
...
<service
android:name="MyService"
android:foregroundServiceType="microphone|camera" /&gt;
</manifest>

這一束縛的改動,使得程序無法在后臺主張服務(wù)拜訪攝像頭和麥克風(fēng)轩娶。如需運(yùn)用儿奶,只能是前臺翻開前臺服務(wù)。除非有如下狀況:

  • 服務(wù)由體系組件主張鳄抒。
  • 服務(wù)是經(jīng)過運(yùn)用小部件主張闯捎。
  • 服務(wù)是經(jīng)過與告知交互主張的。
  • 服務(wù)是PendingIntent主張的许溅,它是從另一個可見的運(yùn)用程序發(fā)送過來的瓤鼻。
  • 服務(wù)由一個運(yùn)用程序主張,該運(yùn)用是一個DPC贤重,且在設(shè)備悉數(shù)者形式下作業(yè)茬祷。
  • 服務(wù)由一個供給VoiceInteractionService的運(yùn)用主張。
  • 服務(wù)由一個具有START_ACTIVITIES_FROM_BACKGROUND權(quán)限的運(yùn)用主張游桩。

權(quán)限主動重置

假定運(yùn)用以 Android 11 或更高版別為方針途徑而且數(shù)月未運(yùn)用牲迫,體系會經(jīng)過主動重置用戶已公布運(yùn)用的作業(yè)時活絡(luò)權(quán)限來保護(hù)用戶數(shù)據(jù)。如下圖所示:

留神上圖中有一個主張主動重置的開關(guān)借卧。假定咱們的運(yùn)用有特別需求盹憎,能夠引導(dǎo)用戶封閉它。示例代碼如下:

public void checkAutoRevokePermission(Context context) {
// 判別是否翻開
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R &&
!context.getPackageManager().isAutoRevokeWhitelisted()) {
// 跳轉(zhuǎn)設(shè)置頁    
Intent intent = new Intent(Intent.ACTION_AUTO_REVOKE_PERMISSIONS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.fromParts("package", context.getPackageName(), null));
context.startActivity(intent);
}
}

SYSTEM_ALERT_WINDOW權(quán)限

這部分我在適配中沒有用到铐刘,直接照搬文檔:

在 Android 11 中陪每,體系會依據(jù)央求主意向某些類型的運(yùn)用公布 SYSTEM_ALERT_WINDOW 權(quán)限:

  • 體系會主意向具有 ROLE_CALL_SCREENING 且央求 SYSTEM_ALERT_WINDOW 的悉數(shù)運(yùn)用公布該權(quán)限。假定運(yùn)用失掉 ROLE_CALL_SCREENING镰吵,就會失掉該權(quán)限檩禾。

  • 體系會主意向經(jīng)過 MediaProjection 截取屏幕且央求 SYSTEM_ALERT_WINDOW的悉數(shù)運(yùn)用公布該權(quán)限,除非用戶已清楚回絕向運(yùn)用公布該權(quán)限疤祭。當(dāng)運(yùn)用中止截取屏幕時盼产,就會失掉該權(quán)限。此用例首要用于游戲直播運(yùn)用勺馆。

這些運(yùn)用無需發(fā)送 ACTION_MANAGE_OVERLAY_PERMISSION 以獲取 SYSTEM_ALERT_WINDOW 權(quán)限戏售,它們只需直接央求 SYSTEM_ALERT_WINDOW 即可侨核。

MANAGE_OVERLAY_PERMISSION intent 一向會將用戶轉(zhuǎn)至體系權(quán)限屏幕

從 Android 11 開始,ACTION_MANAGE_OVERLAY_PERMISSION intent 一向會將用戶轉(zhuǎn)至頂級設(shè)置屏幕灌灾,用戶可在其間公布或撤消運(yùn)用的 SYSTEM_ALERT_WINDOW 權(quán)限搓译。intent 中的任何 package: 數(shù)據(jù)都會被疏忽。

在更低版其他 Android 中锋喜,ACTION_MANAGE_OVERLAY_PERMISSION intent 能夠指定一個軟件包些己,它會將用戶轉(zhuǎn)至運(yùn)用專用屏幕以辦理權(quán)限。從 Android 11 開始將不再支撐此功用嘿般,而是有必要由用戶先挑選要公布或撤消哪些運(yùn)用的權(quán)限段标。此改動能夠讓權(quán)限的公布更有目的性,然后達(dá)到保護(hù)用戶的目的博个。

讀取手機(jī)號

假定你是經(jīng)過TelecomManagergetLine1Number辦法怀樟,或TelephonyManagergetMsisdn方法獲取電話號碼功偿。那么在Android 11中需求增加READ_PHONE_NUMBERS權(quán)限盆佣。運(yùn)用其他辦法不受限。

<manifest>
<!-- 假定運(yùn)用僅在 Android 10及更低版別中運(yùn)用該權(quán)限械荷,能夠增加 maxSdkVersion="29" -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /&gt;
</manifest>

4.其他行為改動

自定義view的Toast

Android 11 為方針途徑的運(yùn)用共耍,從后臺發(fā)送自定義view的Toast音訊體系會進(jìn)行屏蔽。前臺運(yùn)用不受影響吨瞎。Toast相應(yīng)的setViewgetView也現(xiàn)已扔掉不主張運(yùn)用痹兜。

假定要在后臺運(yùn)用,推薦運(yùn)用默許的toast或Snackbar替代颤诀。

APK簽名

Android 11 為政策途徑的運(yùn)用字旭,僅經(jīng)過v1 簽名的運(yùn)用無法在Android 11的設(shè)備上設(shè)備或更新。有必要運(yùn)用v2或更高版別進(jìn)行簽名崖叫。

一同Android 11 增加了對 APK 簽名方案 v4 的支撐遗淳。

AsyncTask

AsyncTask在Android 11現(xiàn)已不主張運(yùn)用,主張遷移至kotlin的協(xié)程心傀。

此外Handler未指定Looper的結(jié)構(gòu)辦法也已不主張運(yùn)用屈暗。

主張清楚指定Looper

private Handler handler = new Handler(Looper.myLooper());
// 或
private Handler handler = new Handler(Looper.getMainLooper());

5.新增東西

兼容性調(diào)試東西

以往咱們做適配的時分,需求先將咱們項(xiàng)目中的 targetSdkVersion 修改為對應(yīng)版別脂男。這就導(dǎo)致你適配進(jìn)程中有或許遭到其他改動的影響养叛,而這個新增的兼容性調(diào)試東西能夠讓你在不晉級targetSdkVersion的狀況下,針對每項(xiàng)改動逐一翻開適配宰翅。

運(yùn)用辦法:

  • 開發(fā)者選項(xiàng)中找到運(yùn)用兼容性改動選項(xiàng)弃甥。
  • 點(diǎn)擊進(jìn)入找到你需求調(diào)試的運(yùn)用
  • 在改動列表中,找到想要翻開或封閉的改動汁讼,然后點(diǎn)擊相應(yīng)的開關(guān)淆攻。


上面榜首行DEFAULT_SCOPED_STORAGE就是啟用分區(qū)儲存肮之,這些常量詳細(xì)的意義見:Android 11 改動列表。

關(guān)于兼容性調(diào)試東西詳細(xì)的運(yùn)用辦法見:兼容性結(jié)構(gòu)東西卜录,這兒限于篇幅就不打開說了戈擒。

無線調(diào)試

Android 11的開發(fā)者選項(xiàng)中增加了一個無線調(diào)試的功用。相似于聯(lián)接藍(lán)牙耳機(jī)功用艰毒,可以無需USB聯(lián)接線進(jìn)行日常開發(fā)調(diào)試作業(yè)筐高。(差異于從前的Android WIFI ADB,這個是真無線丑瞧,哈哈)

運(yùn)用辦法:

  • 開發(fā)者選項(xiàng)中找到無線調(diào)試并翻開柑土。
  • 初次配對需點(diǎn)擊“運(yùn)用配對碼配對設(shè)備”
  • 作業(yè) adb pair ipaddr:port后輸入配對碼進(jìn)行聯(lián)接。

留神事項(xiàng):

  • 堅(jiān)持電腦和手機(jī)在一個網(wǎng)絡(luò)绊汹。
  • Platform Tools 版別需大于30.0稽屏。可運(yùn)用adb --version檢查西乖。

不過我自己領(lǐng)會下來狐榔,感覺聯(lián)接不是很安穩(wěn),不知是AS的問題仍是手機(jī)問題获雕。一同鎖屏后也會斷開聯(lián)接薄腻,領(lǐng)會不是很好。届案。庵楷。等候后續(xù)的優(yōu)化吧。


本篇內(nèi)容有點(diǎn)多楣颠【∨Γ總結(jié)一下,Android 11在權(quán)限上的改動比較多童漩,但假定你一向恪守央求權(quán)限相關(guān)的最佳做法弄贿,那么根本上不需求額定的適配作業(yè)。

最終側(cè)重一下睁冬,關(guān)于單次授權(quán)挎春,權(quán)限對話框的可見性,SYSTEM_ALERT_WINDOW 權(quán)限豆拨,設(shè)備apk這些改動只要在Android 11上就會收效直奋,不管你是否適配Android 11。關(guān)于其他改動和API(相機(jī)施禾、5G脚线、瀑布屏、鍵盤等)弥搞,由于我暫時沒有遇到邮绿,也就沒有列出渠旁,有需求的能夠點(diǎn)擊文末的官方文檔鏈接檢查。

截止發(fā)這篇博客時船逮,我手機(jī)上只發(fā)現(xiàn)嗶哩嗶哩現(xiàn)已適配了Android 11顾腊。大多數(shù)停留在28、29挖胃,更有甚者還在26(Android 8.0 國內(nèi)上架的最低適配標(biāo)準(zhǔn))杂靶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酱鸭,隨后出現(xiàn)的幾起案子吗垮,更是在濱河造成了極大的恐慌,老刑警劉巖凹髓,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烁登,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔚舀,警方通過查閱死者的電腦和手機(jī)饵沧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝗敢,“玉大人捷泞,你說我怎么就攤上這事足删∈偾矗” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵失受,是天一觀的道長讶泰。 經(jīng)常有香客問我,道長拂到,這世上最難降的妖魔是什么痪署? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮兄旬,結(jié)果婚禮上狼犯,老公的妹妹穿的比我還像新娘。我一直安慰自己领铐,他們只是感情好悯森,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绪撵,像睡著了一般瓢姻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上音诈,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天幻碱,我揣著相機(jī)與錄音绎狭,去河邊找鬼。 笑死褥傍,一個胖子當(dāng)著我的面吹牛儡嘶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恍风,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼社付,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了邻耕?” 一聲冷哼從身側(cè)響起鸥咖,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兄世,沒想到半個月后啼辣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡御滩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年鸥拧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片削解。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡富弦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氛驮,到底是詐尸還是另有隱情腕柜,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布矫废,位于F島的核電站盏缤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蓖扑。R本人自食惡果不足惜唉铜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望律杠。 院中可真熱鬧潭流,春花似錦、人聲如沸柜去。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诡蜓。三九已至熬甫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椿肩。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工瞻颂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人郑象。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓贡这,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厂榛。 傳聞我的和親對象是個殘疾皇子盖矫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容