Behavior changes: Apps targeting Android 12

文章推薦指數: 80 %
投票人數:10人

Warning: If an activity, service, or broadcast receiver uses intent filters and doesn't have an explicitly-declared value for android:exported , your app can't ... Platform AndroidStudio GooglePlay Jetpack Kotlin Docs Games English BahasaIndonesia Español–AméricaLatina Português–Brasil 中文–简体 日本語 한국어 Signin Platform Overview Releases Devices Wear Technology LargeScreens MachineLearning Privacy Android5G Platform Overview Releases Devices Wear Technology LargeScreens MachineLearning Privacy Android5G AndroidStudio GooglePlay Jetpack Kotlin Docs Games AllAndroidreleases Android12 Home Featuresandchangeslist 12Lfeaturedrop Home12LfeaturesandchangesGet12LSetupthe12LSDKAPIdiffs-API31→API32 DeveloperSupportimages Behaviorchanges Behaviorchanges:allapps Behaviorchanges:appstargetingAndroid12 Non-SDKrestrictions Deprecations NewfeaturesandAPIs Overview Widgetsimprovements What'snewforenterprise Getyourappsready Migrateyourapps GetAndroid12 SetuptheAndroid12SDK Referenceupdates APIdiffs-API30→API31 BroadcastIntents(API31) CommonIntents(API31) Compatibilityframeworkchanges More Dashboards AndroidDevelopers Platform Releases Behaviorchanges:AppstargetingAndroid12 Stayorganizedwithcollections Saveandcategorizecontentbasedonyourpreferences. Likeearlierreleases,Android 12includesbehaviorchangesthat mayaffectyourapp.Thefollowingbehaviorchangesapplyexclusivelytoapps thataretargetingAndroid 12orhigher.Ifyourappis targetingAndroid12,youshouldmodifyyourapptosupportthesebehaviors properly,whereapplicable. Besuretoalsoreviewthelistofbehaviorchangesthataffectallapps runningonAndroid 12. Userexperience Customnotifications Android12changestheappearanceandbehavioroffullycustomnotifications. Previously,customnotificationswereabletousetheentirenotificationarea andprovidetheirownlayoutsandstyles.Thisresultedinanti-patternsthat couldconfuseusersorcauselayoutcompatibilityissuesondifferentdevices. ForappstargetingAndroid12,notificationswithcustomcontentviewswillno longerusethefullnotificationarea;instead,thesystemappliesastandard template.Thistemplateensuresthatcustomnotificationshavethesame decorationasothernotificationsinallstates,suchasthenotification'sicon andexpansionaffordances(inthecollapsedstate)andthenotification'sicon, appname,andcollapseaffordance(intheexpansionstate).Thisbehavioris nearlyidenticaltothebehaviorof Notification.DecoratedCustomViewStyle. Inthisway,Android12makesallnotificationsvisuallyconsistentandeasyto scan,withadiscoverable,familiarnotificationexpansionforusers. Thefollowingillustrationshowsacustomnotificationinthestandardtemplate: Thefollowingexamplesshowhowcustomnotificationswouldrenderinacollapsed andanexpandedstate: ThechangeinAndroid12affectsappsthatdefinecustomsubclassesof Notification.Style,orwhichuse Notification.Builder’smethods setCustomContentView(RemoteViews), setCustomBigContentView(RemoteViews), andsetCustomHeadsUpContentView(RemoteViews). Ifyourappisusingfullycustomnotifications,werecommendtestingwiththe newtemplateassoonaspossible. Enablethecustomnotificationschange: Changeyourapp'stargetSdkVersiontoStoenablethenewbehavior. Recompile. InstallyourapponadeviceoremulatorrunningAndroid12. Testallnotificationsthatusecustomviews,ensuringtheylookasyou expectintheshade.Whiletesting,taketheseconsiderationsintoaccount andmakethenecessaryadjustments: Thedimensionsofcustomviewshavechanged.Ingeneral,theheight affordedtocustomnotificationsislessthanbefore.Inthecollapsed state,themaximumheightofthecustomcontenthasdecreasedfrom106dp to48dp.Also,thereislesshorizontalspace. AllnotificationsareexpandableforappstargetingAndroid12. Typically,thismeansifyou'reusingsetCustomContentView, you'llalsowanttousesetBigCustomContentView tomakesurecollapsedandexpandedstatesareconsistent. Tomakesurethatthe"HeadsUp"statelooksasyouexpect,don’tforget toraisetheimportanceofthenotificationchannelto"HIGH"(Popson screen). AndroidAppLinksverificationchanges OnappsthattargetAndroid 12orhigher,thesystemmakes severalchangestohowAndroidAppLinksare verified.These changesimprovethereliabilityoftheapp-linkingexperienceandprovidemore controltoappdevelopersandendusers. IfyourelyonAndroidAppLinkverificationtoopenweblinksinyourapp, checkthatyouusethecorrectformatwhenyouaddintent filtersfor AndroidAppLinkverification.Inparticular,makesurethattheseintent filtersincludetheBROWSABLEcategoryandsupportthehttpsscheme. Youcanalsomanually verifyyour app'slinkstotestthereliabilityofyourdeclarations. Picture-in-picturebehaviorimprovements Android12introducesbehaviorimprovementsforpicture-in-picture(PiP) mode.SeePicture-in-pictureimprovements formoreinformation. Toastredesign InAndroid12,thetoastviewhasbeen redesigned.Toastsarenowlimitedtotwolinesoftextandshowtheapplication iconnexttothetext. SeeToastsoverviewforfurtherdetails. Securityandprivacy Approximatelocation OndevicesthatrunAndroid 12orhigher,userscanrequest approximatelocation accuracyforyourapp. Note:OnsomereleasesofAndroid 12,thischangealwaysaffects yourapp, regardlessoftargetSDKversion. ModernSameSitecookiesinWebView Android’sWebViewcomponentisbasedonChromium, theopensourceprojectthatpowersGoogle’sChromebrowser.Chromiumintroduced changestothehandlingofthird-partycookiestoprovidemoresecurityand privacyandofferusersmoretransparencyandcontrol.StartinginAndroid12, thesechangesarealsoincludedinWebViewwhenappstarget Android 12(APIlevel 31)orhigher. TheSameSiteattributeofacookiecontrolswhetheritcanbesentwithany requests,oronlywithsame-siterequests.Thefollowingprivacy-protecting changesimprovethedefaulthandlingofthird-partycookiesandhelpprotect againstunintendedcross-sitesharing: CookieswithoutaSameSiteattributearetreatedasSameSite=Lax. CookieswithSameSite=NonemustalsospecifytheSecureattribute,meaning theyrequireasecurecontextandshouldbesentoverHTTPS. LinksbetweenHTTPandHTTPSversionsofasitearenowtreatedascross-site requests,socookiesarenotsentunlesstheyareappropriatelymarkedas SameSite=None;Secure. Fordevelopers,thegeneralguidanceistoidentifythecross-sitecookie dependenciesinyourcriticaluserflowsandensurethattheSameSite attributeisexplicitlysetwiththeappropriatevalueswhereneeded.Youmust explicitlyspecifythecookiesthatareallowedtoworkacrosswebsitesor acrosssame-sitenavigationsthatmovefromHTTPtoHTTPS. Forcompleteguidanceforwebdevelopersonthesechanges,seeSameSiteCookies ExplainedandSchemeful SameSite. TestSameSitebehaviorsinyourapp IfyourappusesWebView,orifyoumanageawebsiteorservicethatuses cookies,werecommendtestingyourflowsonAndroid 12WebView. Ifyoufindissues,youmightneedtoupdateyourcookiestosupportthenew SameSitebehaviors. Watchforissuesinloginsandembeddedcontent,aswellassign-inflows, purchasing,andotherauthenticationflowswheretheuserstartsonaninsecure pageandtransitionstoasecurepage. TotestanappwithWebView,youmustenablethenewSameSitebehaviorsforthe appthatyouwanttotestbycompletingeitherofthefollowingsteps: ManuallyenableSameSitebehaviorsonthetestdevicebytogglingtheUIflag webview-enable-modern-cookie-same-site intheWebViewdevtools. ThisapproachletsyoutestonanydevicerunningAndroid5.0(APIlevel21) orhigher—includingAndroid 12—andWebViewversion89.0.4385.0 orhigher. CompileyourapptotargetAndroid 12(APIlevel 31)bytargetSdkVersion. Ifyouusethisapproach,youmustuseadevicethatruns Android 12. ForinformationonremotedebuggingforWebViewonAndroid,seeGetStarted withRemoteDebuggingAndroidDevices. Otherresources FormoreinformationabouttheSameSitemodernbehaviorsandrollouttoChrome andWebView,visittheChromiumSameSiteUpdates page.IfyoufindabuginWebView orChromium,youcanreportitinthepublicChromiumissue tracker. Motionsensorsarerate-limited Toprotectpotentiallysensitiveinformationaboutusers,ifyourapptargets Android 12orhigher,thesystemplacesalimitontherefresh rateofdatafromcertainmotionsensorsandpositionsensors. Learnmoreaboutsensor rate-limiting. Apphibernation Android 12expandsuponthepermissionsauto-reset behavior thatwasintroducedinAndroid 11(APIlevel 30).Ifyourapptargets Android 12andtheuserdoesn'tinteractwithyourappforafew months,thesystemauto-resetsanygrantedpermissionsandplacesyourappina hibernationstate. Learnmoreintheguideaboutapp hibernation. Attributiondeclarationindataaccessauditing ThedataaccessauditingAPI,introducedinAndroid 11(APIlevel 30),allowsyou tocreateattribution tagsbasedonyour app'susecases.Thesetagsmakeiteasierforyoutodeterminewhichpartof yourappperformsaspecifictypeofdataaccess. IfyourapptargetsAndroid 12orhigher,youmustdeclarethese attributiontagsin yourapp'smanifestfile. ADBbackuprestriction Tohelpprotectprivateappdata,Android12changesthedefaultbehaviorofthe adbbackupcommand.ForappsthattargetAndroid 12(APIlevel 31)orhigher, whenauserrunstheadbbackupcommand,appdataisexcludedfromanyother systemdatathatisexportedfromthedevice. Ifyourtestingordevelopmentworkflowsrelyonappdatausingadbbackup, youcannowoptintoexportingyourapp'sdatabysetting android:debuggable totrueinyourapp'smanifestfile. Caution:Tohelpprotectyourapp'sdata,remembertosetandroid:debuggable tofalsebeforereleasingyourapp. Safercomponentexporting IfyourapptargetsAndroid 12orhigherandcontains activities, services,orbroadcast receiversthatuseintent filters,youmustexplicitly declarethe android:exportedattribute fortheseappcomponents. Warning:Ifanactivity,service,orbroadcastreceiverusesintentfiltersand doesn'thaveanexplicitly-declaredvalueforandroid:exported,yourappcan't beinstalledonadevicethatrunsAndroid 12orhigher. Iftheappcomponentincludesthe LAUNCHERcategory,set android:exportedtotrue.Inmostothercases,setandroid:exportedto false. Thefollowingcodesnippetshowsanexampleofaservicethatcontainsanintent filterwhoseandroid:exportedattributeissettofalse: MessagesinAndroidStudio Ifyourappcontainsanactivity,service,orbroadcastreceiverthatuses intentfiltersbutdoesn'tdeclareandroid:exported,thefollowingwarning messagesappear,dependingontheversionofAndroidStudiothatyouuse: AndroidStudio2020.3.1Canary11orlater Thefollowingmessagesappear: Thefollowinglintwarningappearsinyourmanifestfile: Whenusingintentfilters,pleasespecifyandroid:exportedaswell Whenyouattempttocompileyourapp,thefollowingbuilderrormessage appears: Manifestmergerfailed:AppstargetingAndroid12andhigherarerequired\ tospecifyanexplicitvalueforandroid:exportedwhenthecorresponding\ componenthasanintentfilterdefined. OlderversionsofAndroidStudio Ifyouattempttoinstalltheapp,Logcat displaysthefollowingerrormessage: Installationdidnotsucceed. Theapplicationcouldnotbeinstalled:INSTALL_FAILED_VERIFICATION_FAILURE Listofapks: [0]'.../build/outputs/apk/debug/app-debug.apk' Installationfaileddueto:'null' Pendingintentsmutability IfyourapptargetsAndroid 12,youmustspecifythe mutabilityof eachPendingIntentobjectthatyour appcreates.Thisadditionalrequirementimprovesyourapp'ssecurity. Testthependingintentmutabilitychange Todeterminewhetheryourappismissingmutabilitydeclarations,lookforthe followinglintwarninginAndroidStudio: Warning:MissingPendingIntentmutabilityflag[UnspecifiedImmutableFlag] Unsafeintentlaunches Toimproveplatformsecurity,Android 12andhigherprovidea debuggingfeaturethatdetectsunsafelaunchesof intents.When thesystemdetectssuchanunsafelaunch,a StrictModeviolationoccurs. Performance Foregroundservicelaunchrestrictions AppsthattargetAndroid 12orhighercan'tstartforeground serviceswhilerunninginthe background, exceptforafewspecial cases. Ifanappattemptstostartaforegroundservicewhilerunninginthe background,anexceptionoccurs(exceptforthefewspecialcases). ConsiderusingWorkManagertoscheduleandstartexpedited work whileyourapprunsinthebackground.Tocompletetime-sensitiveactionsthat theuserrequests,startforegroundserviceswithinanexact alarm. Exactalarmpermission Toencourageappstoconservesystemresources,appsthattarget Android 12andhigherandsetexact alarmsmusthaveaccesstothe"Alarms& reminders"capabilitythatappearswithintheSpecialappaccessscreenin systemsettings. Toobtainthisspecialappaccess,requestthe SCHEDULE_EXACT_ALARM permissioninthemanifest. Exactalarmsshouldonlybeusedforuser-facingfeatures.Learnmoreaboutthe acceptableusecasesforsettinganexact alarm. Disablethebehaviorchange AsyouprepareyourapptotargetAndroid 12,youcantemporarily disablethebehaviorchangeinyourdebuggablebuild variantfortestingpurposes.Todoso,complete oneofthefollowingtasks: IntheDeveloperoptionssettingscreen,selectAppCompatibility Changes.Onthescreenthatappears,taponyourapp'sname,thenturnoff REQUIRE_EXACT_ALARM_PERMISSION. Inaterminalwindowonyourdevelopmentmachine,runthefollowingcommand: adbshellamcompatdisableREQUIRE_EXACT_ALARM_PERMISSIONPACKAGE_NAME Notificationtrampolinerestrictions Whenusersinteractwith notifications,someappsrespondto notificationtapsbylaunchinganapp componentthateventuallystartsthe activitythattheuserfinallyseesandinteractswith.Thisappcomponentis knownasanotificationtrampoline. ToimproveappperformanceandUX,appsthattargetAndroid 12or highercan'tstartactivitiesfromservicesor broadcastreceiversthatareusedas notificationtrampolines.Inotherwords,aftertheusertapsonanotification, oranactionbuttonwithin thenotification,yourappcannotcall startActivity() insideofaserviceorbroadcastreceiver. Whenyourapptriestostartanactivityfromaserviceorbroadcastreceiver thatactsasanotificationtrampoline,thesystempreventstheactivityfrom starting,andthefollowingmessageappearsin Logcat: Indirectnotificationactivitystart(trampoline)fromPACKAGE_NAME,\ thisshouldbeavoidedforperformancereasons. Identifywhichappcomponentsactasnotificationtrampolines Whentestingyourapp,afteryoutaponanotification,youcanidentifywhich serviceorbroadcastreceiveractedasthenotificationtrampolineinyourapp. Todoso,lookatoutputofthefollowingterminalcommand: adbshelldumpsysactivityservice\ com.android.systemui/.dump.SystemUIAuxiliaryDumpService Asectionoftheoutputincludesthetext"NotifInteractionLog".Thissection containstheinformationthat'snecessarytoidentifythecomponentthatstarts astheresultofanotificationtap. Updateyourapp Ifyourappstartsanactivityfromaserviceorbroadcastreceiverthatactsas anotificationtrampoline,completethefollowingmigrationsteps: CreateaPendingIntentobjectthat isassociatedwiththeactivitythatusersseeaftertheytaponthe notification. UsethePendingIntentobjectthatyoucreatedinthepreviousstepaspart ofbuildingyour notification. Toidentifytheoriginoftheactivity,inordertoperformloggingforexample, useextraswhenpostingthenotification.Forcentralizedlogging,use ActivityLifecycleCallbacks orJetpacklifecycleobservers. Togglethebehavior Whentestingadebuggableversionofyourapp,youcanenableanddisablethis restrictionusingtheNOTIFICATION_TRAMPOLINE_BLOCKappcompatibilityflag. Backupandrestore Therearechangestohowbackupandrestoreworksinappsthatrunonandtarget Android 12(APIlevel 31).Androidbackupandrestorehastwoforms: Cloudbackups:Userdataisstoredinauser’sGoogleDrivesothatitcan laterberestoredonthatdeviceoranewdevice. Device-to-device(D2D)transfers:Userdataissentdirectlytotheuser's newdevicefromtheirolderdevice,suchasbyusingacable. Formoreinformationonhowdataisbackedupandrestored,seeBackupuser datawithAutoBackupandBackupkey-value pairswithAndroidBackupService. D2Dtransferfunctionalitychanges ForappsrunningonandtargetingAndroid 12andhigher: Specifyingandroid:allowBackup="false"doesdisablebackupstoGoogleDrive, butdoesn’tdisableD2Dtransfersfortheapp. Specifyingincludeandexclude ruleswiththeXML configurationmechanismnolongeraffectsD2Dtransfers,thoughitstill affectsGoogleDrivebackups.TospecifyrulesforD2Dtransfers,youmustuse thenewconfigurationcoveredinthenextsection. Newincludeandexcludeformat AppsrunningonandtargetingAndroid 12andhigherusea differentformatfortheXMLconfiguration.Thisformatmakesthedifference betweenGoogleDrivebackupandD2Dtransferexplicitbyrequiringyouto specifyincludeandexcluderulesseparatelyforcloudbackupsandforD2D transfer. Optionally,youcanalsouseittospecifyrulesforbackup,inwhichcasethe oldconfigurationisignoredondevicesrunningAndroid12orhigher.Theold configurationisstillrequiredfordevicesrunningAndroid11orlower. Note:Ifyouusethenewconfigurationformat,yourappwillusethenew behaviorwhenrunningonadevicewithAndroid12orhigher,evenifyoudon't yettargetAndroid 12. XMLformatchanges ThefollowingistheformatusedforbackupandrestoreconfigurationinAndroid 11andlower: Thefollowingshowsthechangesintheformatinbold. ... ... ... ... ... ... Formoreinformation,seethecorrespondingsection intheguidetobackingupuserdatawithAutoBackup. Manifestflagforapps PointyourappstothenewXMLconfigurationbyusingthe android:dataExtractionRules attributeinyourmanifestfile.WhenyoupointtothenewXMLconfiguration, theandroid:fullBackupContentattributethatpointstotheoldconfigis ignoredondevicesrunningAndroid12orhigher.Thefollowingcodesampleshows thenewmanifestfileentries: android:fullBackupContent="old_config.xml" android:dataExtractionRules="new_config.xml" ...> Connectivity ConcurrentPeer-to-Peer+InternetConnection ForappstargetingAndroid 12(APIlevel 31)orhigher,devicesthatsupport concurrentpeer-to-peerandinternetconnectionscanmaintainsimultaneousWi-Fi connectionstoboththepeerdeviceandtheprimaryinternet-providingnetwork, makingtheuserexperiencemoreseamless.Appstargeting Android 11(APIlevel 30)orlowerstillexperiencethelegacybehavior,where theprimaryWi-Finetworkisdisconnectedpriortoconnectingtothepeer device. Compatibility WifiManager.getConnectionInfo() isabletoreturntheWifiInfofor onlyasinglenetwork.Becauseofthis,theAPI'sbehaviorhasbeenchangedin thefollowingwaysinAndroid 12andhigher: IfonlyasingleWi-Finetworkisavailable,itsWifiInfoisreturned. IfmorethanoneWi-Finetworkisavailableandthecallingapptriggereda peer-to-peerconnection,theWifiInfocorrespondingtothepeerdeviceis returned. IfmorethanoneWi-Finetworkisavailableandthecallingappdidnot triggerapeer-to-peerconnection,theprimaryinternet-providingconnection's WifiInfoisreturned. Toprovideabetteruserexperienceondevicesthatsupportdualconcurrent Wi-Finetworks,werecommendallapps—especiallyonesthattrigger peer-to-peerconnections—migrateawayfromcalling WifiManager.getConnectionInfo()andinsteaduse NetworkCallback.onCapabilitiesChanged() togetallWifiInfoobjectsthatmatchtheNetworkRequestusedtoregister theNetworkCallback.getConnectionInfo()isdeprecatedasof Android 12. ThefollowingcodesampleshowshowtogettheWifiInfoina NetworkCallback: Kotlin valnetworkCallback=object:ConnectivityManager.NetworkCallback(){ ... overridefunonCapabilitiesChanged( network:Network, networkCapabilities:NetworkCapabilities){ valtransportInfo=networkCapabilities.getTransportInfo() if(transportInfo!isWifiInfo)return valwifiInfo:WifiInfo=transportInfo ... } } Java finalNetworkCallbacknetworkCallback=newNetworkCallback(){ ... @Override publicvoidonCapabilitiesChanged( Networknetwork, NetworkCapabilitiesnetworkCapabilities){ finalTransportInfotransportInfo=networkCapabilities.getTransportInfo(); if(!(transportInfoinstanceofWifiInfo))return; finalWifiInfowifiInfo=(WifiInfo)transportInfo; ... } ... }; mDNSRespondernativeAPI Android12changeswhenappscaninteractwiththemDNSResponderdaemonusing themDNSRespondernativeAPI. Previously,whenanappregisteredaserviceonthenetwork andcalledthegetSystemService() method,thesystem'sNSDservicestartedthemDNSResponderdaemon,evenifthe apphadnotcalledanyNsdManagermethodsyet.Thedaemonthensubscribedthe devicetotheall-nodesmulticastgroups,causingthesystemtowakemore frequentlyanduseadditionalpower.Tominimizebatteryusage,inAndroid12 andhigherthesystemnowstartsthemDNSResponderdaemononlywhenitisneeded forNSDeventsandstopsitafterwards. BecausethischangeaffectswhenthemDNSResponderdaemonisavailable,apps thatassumethatthemDNSResponderdaemonwillbestartedaftercallingthe getSystemService()methodmightreceivemessagesfromthesystemthatsaythat themDNSResponderdaemonisnotavailable.AppsthatuseNsdManageranddonot usethemDNSRespondernativeAPIareunaffectedbythischange. Vendorlibraries Vendor-suppliednativesharedlibraries Non-NDKnativesharedlibraries thatareprovidedbysiliconvendorsordevicemanufacturersarenotaccessible bydefaultiftheappistargetingAndroid 12(APIlevel 31)orhigher.The librariesareaccessibleonlywhentheyareexplicitlyrequestedusingthe tag. IftheappistargetingAndroid 11(APIlevel 30)orlower,the tagisnotrequired.Inthatcase,anynativeshared libraryisaccessibleregardlessofwhetheritisanNDKlibrary. Updatednon-SDKrestrictions Android 12includesupdatedlistsofrestrictednon-SDK interfacesbasedoncollaborationwithAndroiddevelopersandthelatest internaltesting.Wheneverpossible,wemakesurethatpublicalternativesare availablebeforewerestrictnon-SDKinterfaces. IfyourappdoesnottargetAndroid 12,someofthesechanges mightnotimmediatelyaffectyou.However,whileyoucancurrentlyusesome non-SDKinterfaces(dependingonyourapp'stargetAPIlevel), usinganynon-SDKmethodorfieldalwayscarriesahighriskofbreakingyour app. Ifyouareunsureifyourappusesnon-SDKinterfaces,youcantestyour app tofindout.Ifyourappreliesonnon-SDKinterfaces,youshouldbeginplanning amigrationtoSDKalternatives.Nevertheless,weunderstandthatsomeappshave validusecasesforusingnon-SDKinterfaces.Ifyoucannotfindanalternative tousinganon-SDKinterfaceforafeatureinyourapp,youshouldrequesta newpublicAPI. TolearnmoreaboutthechangesinthisreleaseofAndroid,seeUpdatesto non-SDKinterfacerestrictionsinAndroid12.Tolearnmore aboutnon-SDKinterfacesgenerally,seeRestrictionsonnon-SDK interfaces. ContentandcodesamplesonthispagearesubjecttothelicensesdescribedintheContentLicense.JavaandOpenJDKaretrademarksorregisteredtrademarksofOracleand/oritsaffiliates. Lastupdated2022-10-04UTC. [{ "type":"thumb-down", "id":"missingTheInformationINeed", "label":"MissingtheinformationIneed" },{ "type":"thumb-down", "id":"tooComplicatedTooManySteps", "label":"Toocomplicated/toomanysteps" },{ "type":"thumb-down", "id":"outOfDate", "label":"Outofdate" },{ "type":"thumb-down", "id":"samplesCodeIssue", "label":"Samples/codeissue" },{ "type":"thumb-down", "id":"otherDown", "label":"Other" }] [{ "type":"thumb-up", "id":"easyToUnderstand", "label":"Easytounderstand" },{ "type":"thumb-up", "id":"solvedMyProblem", "label":"Solvedmyproblem" },{ "type":"thumb-up", "id":"otherUp", "label":"Other" }] Twitter Follow@AndroidDevonTwitter YouTube CheckoutAndroidDevelopersonYouTube LinkedIn ConnectwiththeAndroidDeveloperscommunityonLinkedIn MoreAndroid Android AndroidforEnterprise Security Source News Blog Podcasts Discover Gaming MachineLearning Privacy 5G AndroidDevices Largescreens WearOS AndroidTV Androidforcars AndroidThings ChromeOSdevices Releases Android11 Android10 Pie Oreo Nougat Marshmallow Lollipop KitKat DocumentationandDownloads AndroidStudioguide Developersguides APIreference DownloadStudio AndroidNDK Support Reportplatformbug Reportdocumentationbug GooglePlaysupport Joinresearchstudies Android Chrome Firebase GoogleCloudPlatform Allproducts Privacy License Brandguidelines Getnewsandtipsbyemail Subscribe English BahasaIndonesia Español–AméricaLatina Português–Brasil 中文–简体 日本語 한국어



請為這篇文章評分?