The Google Play In-App Review API lets you prompt users to submit Play Store ratings and reviews without the inconvenience of leaving your ...
Platform
AndroidStudio
GooglePlay
Jetpack
Kotlin
Docs
Games
Language
English
BahasaIndonesia
Español–AméricaLatina
Português–Brasil
中文–简体
日本語
한국어
Signin
Documentation
Overview
Guides
Reference
Samples
Design&Quality
Platform
AndroidStudio
GooglePlay
Jetpack
Kotlin
Docs
Overview
Guides
Reference
Samples
Design&Quality
Games
AppBasics
Introduction
Buildyourfirstapp
OverviewCreateanAndroidprojectRunyourappBuildasimpleuserinterfaceStartanotheractivity
Appfundamentals
Appresources
OverviewHandleconfigurationchanges
Localization
LocalizeyourappTestyourappwithpseudolocalesUnicodeandinternationalizationsupportLanguageandlocaleresolutionComplexXMLresources
Resourcetypes
OverviewAnimationColorstatelistDrawableLayoutMenuStringStyleFontMoretypes
Appmanifestfile
Overview
Devices
Devicecompatibility
OverviewScreencompatibilityoverviewSupportdifferentpixeldensitiesDeclarerestrictedscreensupport
MultipleAPKsupport
OverviewCreatemultipleAPKsfordifferentAPIlevelsCreatemultipleAPKsfordifferentscreensizesCreatemultipleAPKsfordifferentGLtexturesCreatemultipleAPKswithseveraldimensionsSupportdifferentlanguagesandculturesSupportdifferentplatformversionsFiltersonGooglePlay
Tablets,largescreens,andfoldables
GetstartedwithlargescreensMediaprojectiononlargescreensEnhancedletterboxing
BuildresponsiveUIs
SupportdifferentscreensizesNavigationforresponsiveUIsMigrateyourUItoresponsivelayoutsActivityembeddingMulti-windowsupportInputcompatibilityonlargescreens
Buildforfoldables
LearnaboutfoldablesMakeyourappfoldawareTestyourapponfoldables
Wear
GetstartedPrinciplesofWearOSdevelopmentUpgradetothelatestversionofWearOSWearOSversusmobiledevelopmentSetupJetpackComposeonWearOSWearOSdeveloperpathwayOngoingActivitiesWearOSuserinterfaceExposedatatocomplications
Gettingstarted
CreateandrunawearableappDebugaWearOSappCaptureWearUIscreenshotsAppearinRecentsandAppResume
Overlays
OverviewUsetheWearUIlibraryHandledifferentwatchshapesScreenoptionsCreatelistsNavigationExitfullscreenactivitiesonWearShowconfirmationsPlayingaudioonwearablesKeepyourappvisibleonWearAuthenticationStandaloneapp
Tiles
OverviewDesignguidelinesDesignsystem
Notifications
NotificationsonWearOSBridgingoptionsfornotifications
Handlingdata
SendandsyncdataonWearOSNetworkaccessandsynconWearOSAccesstheWearableDataLayerTransferassetsSendandreceivemessagesHandledatalayereventsSyncdataitemswiththeDataLayerAPIRequestpermissionsDetectlocation
Userinput
PhysicalbuttonsRotaryinputCreateinputmethodeditorsinWearVoice
WatchFaceStudio
WatchFaceStudioKeyboardshortcutsManageaWatchFaceStudioprojectCreateawatchfacewithWatchFaceStudioBuildcomplicationsinWatchFaceStudioTagexpressionsLanguagesettingsAlways-oninWatchFaceStudioGyroeffectsBuildanduploadfromWatchFaceStudioTestyourwatchfaceFAQ
Healthservices
OverviewActivedataandexercisePassivedataupdatesUsesyntheticdataprovidersHealthPlatformAPI
Design
IntroductionDesignprinciplesGettingstartedInteractiontypesScreenshapesNotificationsComplicationsOverlaysOngoingactivitiesConfirmationoverlayDisconnectionindicatorsPermissionmessagesSelectioncontrolsLaunchandlatencyNavigationPermissionsSigninHardwarebuttonsColorTypographyIconsDownloadsWearMaterialTheming
Compose
UseJetpackComposeonWearOSButtonsChipsTogglechipsCardsListsCurvedtextsSwipetodismissScrollindicatorsPickersPageviewersSlidersProgressindicator
Creatingwatchfaces
OverviewDesignwatchfacesBuildawatchfaceserviceDrawwatchfacesWatchfacecomplicationsAddingcomplicationstoawatchfaceCreatinginteractivewatchfacesProvideconfigurationactivitiesAddresscommonissuesImproveperformacewithhardwareaccelerationOptimizeperformanceandbatterylifeWearappqualityPackageWearOSappsDistributetoWearOSCreateWearOSappsforChinaWearOSreleasenotes
AndroidTV
Overview
BuildTVApps
OverviewGetstartedwithTVappsAndroidXTVlibrariesHandleTVhardwareManageTVcontrollersBuildTVlayoutsOn-screenkeyboardCreateTVnavigationBestpracticesfordrivingengagementonGoogleTV
BuildTVplaybackapps
Overview
UIguidance&LeanbackAPI
CreateacatalogbrowserProvideacardviewBuildadetailsviewUsetransportcontrolsPlaybackcontrolsonTVAddaguidedstepIntroducefirst-timeuserstoyourappImplementamediasessionBackgroundplaybackinaNowPlayingcardAudiocapabilitiesMatchcontentframerate
HelpusersfindcontentonTV
Overview
RecommendTVcontent
OverviewChannelsonthehomescreenVideoprogramattributesAudioprogramattributesGameprogramattributes
WatchNext
AddprogramsAttributesGuidelinesforappdevelopersGuidelinesforTVprovidersPreviewvideosRecommendationsinAndroidNandearlierMakeTVappssearchableSearchwithinTVApps
BuildTVgames
OverviewUseStreamProtectforlatency-sensitivestreamingapps
BuildTVinputservices
OverviewDevelopaTVinputserviceWorkwithchanneldataManageTVuserinteractionSupporttime-shiftingSupportcontentrecordingTVAppschecklist
TVAccessibility
AccessibilitybestpracticesTalkBackevaluationexamplesAdoptsystemcaptionsettingsCustomviewaccessibilitysupportCustomviewaccessibilitysample
Releases
Android12forTV
AndroidforCars
Overview
Buildmediaappsforcars
BuildmediaappsforcarsAddsupportforAndroidAutoAddsupportforAndroidAutomotiveOSBuildmessagingappsforAndroidAuto
Buildnavigation,parking,andchargingappsforcars
UsingtheAndroidforCarsAppLibraryBuildparkingandchargingappsforcarsBuildnavigationappsforcarsAddsupportforAndroidAutoAddsupportforAndroidAutomotiveOSBuildvideoappsforAndroidAutomotiveOSTestAndroidappsforcarsDistributeAndroidappsforcarsGooglePlayservicesforcarsNotificationsonAndroidAutomotiveOS
ChromeOSdevices
OverviewBuildingappsforChromeOSOptimizingAppsforChromeOSPreparingyourdevelopmentenvironmentAppManifestCompatibilityforChromebooksChromeOSDeviceSupportforAppsAppRenderingDifferencesonChromebooksWindowmanagementAdaptingGamesonChromeOSSmoothanimationonChromeOSTestCasesforAndroidAppsonChromeOS
Apparchitecture
Introduction
Guidetoapparchitecture
Overview
UIlayer
OverviewUIeventsDomainlayerDatalayerLearningpathway
ArchitectureComponents
UIlayerlibraries
Viewbinding
OverviewMigratefromKotlinsyntheticstoviewbinding
Databindinglibrary
OverviewGetstartedLayoutsandbindingexpressionsWorkwithobservabledataobjectsGeneratedbindingclassesBindingadaptersBindlayoutviewstoArchitectureComponentsTwo-waydatabinding
Lifecycle-awarecomponents
HandlelifecyclesViewModelLiveDataSaveUIstatesSavedStatemoduleforViewModelUseKotlincoroutineswithlifecycle-awarecomponents
PagingLibrary
OverviewLoadanddisplaypageddataPagefromnetworkanddatabaseTransformdatastreamsManageandpresentloadingstatesTestyourPagingimplementationMigratetoPaging3
Paging2
OverviewDisplaypagedlistsLoadpageddata
Datalayerlibraries
DataStore
WorkManager
OverviewGettingStarted
How-ToGuides
DefiningyourWorkRequestsWorkstatesManagingworkObservingintermediateWorkerprogressChainingworktogetherTestingWorkerimplementationIntegrationtestswithWorkManagerDebuggingWorkManager
AdvancedConcepts
ConfigurationandInitialization
ThreadinginWorkManager
OverviewThreadinginWorkerThreadinginCoroutineWorkerThreadinginRxWorkerThreadinginListenableWorkerSupportforlong-runningworkersMigratingfromFirebaseJobDispatcherMigratingfromGCMNetworkManager
Appentrypoints
Activities
IntroductiontoactivitiesTheactivitylifecycleActivitystatechangesTestyouractivitiesTasksandbackstackProcessesandapplifecycleParcelablesandbundlesLoadersRecentsscreenRestrictionsonstartingactivitiesfromthebackground
Appshortcuts
OverviewCreateshortcutsAddcapabilitiesManageshortcutsBestpracticesforshortcuts
Appnavigation
PrinciplesofnavigationDesignfordifferentformfactorsHandleconfigurationchanges
Navigationcomponent
OverviewGettingstartedCreatedestinationsDesignnavigationgraphsNestedgraphsGlobalactionsNavigatetoadestinationConditionalnavigationPassdatabetweendestinationsCreateadeeplinkforadestinationAnimatetransitionsbetweendestinationsUpdateUIcomponentswithNavigationUIKotlinDSLInteractprogrammaticallyNavigatewithfeaturemodulesBestpracticesformulti-moduleprojectsTestnavigationAddnewdestinationtypesMigratetotheNavigationcomponent
Fragments
OverviewCreateafragmentFragmentmanagerFragmenttransactionsAnimatetransitionsbetweenfragmentsFragmentlifecycleSavingstatewithfragmentsCommunicatewithfragmentsWorkingwiththeappbarDisplayingdialogswithDialogFragmentDebugyourfragmentsTestyourfragments
Applinks
OverviewEnablinglinkstoappcontentVerifyapplinksCreateapplinksforinstantappsCreateswipeviewswithtabsusingViewPagerCreateswipeviewswithtabsusingViewPager2Providecustombacknavigation
Dependencyinjection
OverviewManualdependencyinjectionDependencyinjectionwithHiltHiltinmulti-moduleappsHiltandJetpackintegrationsHilttestingguideHiltandDaggerannotationscheatsheet
Dagger
DaggerbasicsUsingDaggerinAndroidappsUsingDaggerinmulti-moduleapps
AppStartup
Coretopics
Appcompatibility
OverviewCompatibilityframeworktoolsRestrictionsonnon-SDKinterfaces
Interactwithotherapps
OverviewSendingtheusertoanotherappGettingaresultfromanactivityAllowingotherappstostartyouractivity
Packagevisibility
OverviewKnowwhichpackagesarevisibleautomaticallyDeclarepackagevisibilityneedsFulfillcommonusecasesTestpackagevisibility
Intentsandintentfilters
OverviewCommonintents
Userinterface
Overview
Layouts
OverviewBuildaresponsiveUIwithConstraintLayout
AddmotiontoyourlayoutwithMotionLayout
OverviewCarouselwithMotionLayoutMotionLayoutexamples
MotionLayoutXMLreference
OverviewCreatealistwithRecyclerViewAdvancedRecyclerViewcustomizationCreateacard-basedlayoutCreateatwopanelayout
Improvinglayoutperformance
OverviewOptimizinglayouthierarchiesRe-usinglayoutswithDelayedloadingofviewsLinearlayoutAdapterviewRelativelayout
Customviewcomponents
OverviewCreatingacustomviewclassImplementingcustomdrawingMakingtheviewinteractiveOptimizingtheviewDesigningforfoldables
Lookandfeel
MaterialdesignStylesandthemesDarkthemeRoundedcornersAdaptiveiconsAddafloatingactionbuttonCreateshadowsandclipviews
Text
AutosizingTextViewsDownloadablefontsFontsinXML
Emoji
SupportmodernemojiEmojicompatibilityMagnifierwidgetSpansButtonsCheckboxesRadiobuttonsTogglebuttonsSpinnersPickersTooltips
Notifications
OverviewCreateanotificationCreateanexpandablenotificationDisplaytime-sensitivenotificationsStartanactivityfromanotificationCreateagroupofnotificationsCreateandmanagenotificationchannelsModifyanotificationBadgeCreateacustomnotification
Splashscreens
OverviewMigrateyourexistingsplashscreenConversationsBubbles
Addtheappbar
OverviewSetuptheappbarAddandhandleactionsAddanupactionUseactionviewsandactionproviders
Windowinsets
OverviewDisplayedge-to-edgeImmersivemodeSupportdisplaycutoutsControlthesoftwarekeyboard
Supportingswipe-to-refresh
OverviewAddingswipe-to-refreshtoyourappRespondingtoarefreshgestureToastsoverview
Pop-upmessagesoverview
OverviewBuildanddisplayapop-upmessageAddanactiontoamessageDialogsMenus
Settings
OverviewOrganizeyoursettingsCustomizeyoursettingsUsesavedvaluesBuildahierarchyincodeHandleotherformfactorsPreferencecomponentsandattributes
Search
OverviewCreatingasearchinterfaceAddingrecentquerysuggestionsAddingcustomsuggestionsSearchableconfiguration
Addingsearchfunctionality
OverviewSettingupthesearchinterfaceStoringandsearchingfordataRemainingbackwardcompatibleReceiverichcontentCopyandpasteDraganddropPicture-in-picturesupport
Creatingbackward-compatibleUIs
OverviewAbstractingthenewAPIsProxyingtothenewAPIsCreatinganimplementationwitholderAPIsUsingtheversion-awarecomponentDevicecontrol
Homechannelsformobileapps
OverviewMediaHomeBooksMediaHomeVideoMediaHomeAudio
Appwidgets
OverviewCreateasimplewidgetEnhanceyourwidgetCreateanadvancedwidgetUsewidgetcollectionsProvideflexiblewidgetlayoutsEnablewidgetconfigurationBuildanappwidgethost
Animations&transitions
OverviewIntroductiontoanimationsPropertyanimationoverviewAnimatedrawablegraphicsRevealorhideaviewusinganimationMoveaviewusinganimationMoveaviewusingaflinganimationEnlargeaviewusingazoomanimationAnimatemovementusingspringphysicsAutoanimatelayoutupdatesAnimatelayoutchangesusingatransitionCreateacustomtransitionanimationStartanactivityusingananimationSlidebetweenfragmentsusingViewPagerSlidebetweenfragmentsusingViewPager2MigratefromViewPagertoViewPager2Additionalresources
Images&graphics
OverviewDrawablesoverviewVectordrawablesoverviewHandlingbitmapsSelectingcolorswiththepaletteAPIReducingimagedownloadsizesHardwareaccelerationOpenGLES
DisplayinggraphicswithOpenGLES
OverviewBuildinganOpenGLESenvironmentDefiningshapesDrawingshapesApplyingprojectionandcameraviewsAddingmotionRespondingtotouchevents
Rendering
OverviewReducingoverdrawPerformanceandviewhierarchiesAnalyzingwithprofileGPUrenderingEnhancinggraphicswithwidecolorcontent
Audio&video
Audio&videooverviewMediacontrolsSupportedmediaformatsMediacodecs
Mediaapparchitecture
MediaapparchitectureoverviewUsingamediasession
Buildinganaudioapp
AudioappoverviewBuildingamediabrowserserviceBuildingamediabrowserclientMediasessioncallbacksUsingthemediacontrollertestapp
Buildingavideoapp
VideoappoverviewBuildingavideoplayeractivityMediasessioncallbacksCompatiblemediatranscodingRespondingtomediabuttonsHandlingchangesinaudiooutputManageaudiofocus
TheGoogleAssistant
TheGoogleAssistantandmediaappsMediaappsonGoogleAssistantdrivingmode
Routingbetweendevices
RoutingoverviewMediaRouteroverviewMediaRouteProvideroverviewControlamplitudewithVolumeShaperMediaPlayeroverviewMediaRecorderoverviewExoPlayerSharingaudioinputCapturevideoandaudioplaybackFramerateBestpracticesforsharingvideoAdditionalResourcesforMedia
Services
OverviewForegroundservicesBoundservicesAIDLoverview
Backgroundtasks
OverviewBackgroundthreadsBackgroundoptimizations
Broadcasts
OverviewImplicitBroadcastExceptions
Managedeviceawakestate
OverviewKeepthedeviceawakeSchedulealarmsUsingaListenableFuture
Permissions
OverviewEvaluatewhetheryourappneedspermissionsDeclareapppermissionsRequestapppermissionsExplainaccesstomoresensitiveinformationApppermissionsbestpracticesPermissionsusedonlyindefaulthandlersRestrictinteractionswithotherappsDefinecustompermissions
Appdata&files
OverviewStorageoverviewSavetoapp-specificstorage
Savetosharedstorage
OverviewMediaDocumentsandotherfilesDatasetsManageallfilesonastoragedeviceSavekey-valuedata
Savedatainalocaldatabase
OverviewDefinedatausingentitiesAccessdatausingDAOsDefinerelationshipsbetweenobjectsWriteasynchronousDAOqueriesCreateviewsintoadatabasePrepopulateyourdatabaseMigrateyourdatabaseTestanddebugyourdatabaseReferencecomplexdataMigratefromSQLitetoRoomSavedatausingSQLiteStorageusecasesandbestpractices
Sharingsimpledata
OverviewSendingsimpledatatootherappsReceivingsimpledatafromotherapps
Sharingfiles
OverviewSettingupfilesharingSharingafileRequestingasharedfileRetrievingfileinformation
SharingfileswithNFC
OverviewSendingfilestoanotherdeviceReceivingfilesfromanotherdevice
Printingfiles
OverviewPrintingphotosPrintingHTMLdocumentsPrintingcustomdocuments
Contentproviders
OverviewContentproviderbasicsCreatingacontentproviderOpenfilesusingstorageaccessframeworkCreateacustomdocumentproviderAppinstalllocation
Userdata&identity
OverviewAddsign-inworkflowShowabiometricauthenticationdialog
Autofillframework
OverviewOptimizeyourappforautofillBuildautofillservicesIntegrateautofillwithkeyboardsIdentifydeveloper-ownedappsReviewhowyourappcollectsandsharesuserdataAuditdataaccessGetauser-resettableadvertisingIDCalendarprovideroverview
Contactsprovider
OverviewRetrievingalistofcontactsRetrievingdetailsforacontactModifyingcontactsusingintentsDisplayingthequickcontactbadgeAccounttransfer
Databackup
OverviewBackupuserdataBackupkey-valuepairsTestbackupandrestoreBestpracticesforuniqueidentifiers
Rememberandauthenticateusers
OverviewRememberyouruserAuthenticatetoOAuth2servicesCreateacustomaccounttype
Userlocation
OverviewRequestlocationpermissionsGetthelastknownlocationChangelocationsettingsRequestlocationupdatesAccesslocationinthebackgroundCreateandmonitorgeofencesDetectwhenusersstartanactivityOptimizelocationforbatteryTestlocationworkflowsMigratetolocationandcontextAPIsAddmaps
Touch&input
OverviewInputevents
Usingtouchgestures
OverviewDetectcommongesturesTracktouchandpointermovementsAnimateascrollgestureSupportnavigationgesturesHandlemulti-touchgesturesDragandscaleManagetoucheventsinaViewGroup
Handlingkeyboardinput
OverviewSpecifyingtheinputmethodtypeHandlinginputmethodvisibilitySupportingkeyboardnavigationHandlingkeyboardactions
Supportinggamecontrollers
OverviewHandlingcontrolleractionsSupportingcontrollersacrossAndroidversionsSupportingmultiplegamecontrollers
Inputmethodeditors
CreatinganinputmethodImagekeyboardSpellingchecker
Camera
Chooseacameralibrary
CameraX
OverviewArchitectureConfiguration
Usecases
PreviewImagecaptureImageanalysisVideocapture
Advancedtopics
ExtensionsAPITransformoutputRotationsDevices
Camera2
OverviewCameracapturesessionsandrequestsCameralensesandcapabilitiesUsemultiplecamerastreamssimultaneouslyCamerapreviewMulti-CameraAPIExtensionsAPI
Camera(deprecated)
OverviewTakephotosRecordvideosControlthecameraCameraAPI
Sensors
OverviewSensorsoverviewMotionsensorsPositionsensorsEnvironmentsensorsRawGNSSmeasurements
Connectivity
Overview
Performingnetworkoperations
OverviewConnecttothenetworkManagenetworkusageReadingnetworkstateOptimizenetworkaccessOptimizenetworkdatausageMonitorconnectivitystatusandconnectionmeteringParseXMLdata
PerformnetworkoperationsusingCronet
OverviewSendasimplerequestCronetrequestlifecycle
Reference
org.chromium.net
OverviewCallbackException
CronetEngine
Overview
CronetEngine.Builder
OverviewLibraryLoaderCronetExceptionInlineExecutionProhibitedExceptionNetworkExceptionQuicExceptionUploadDataProviderUploadDataProvidersUploadDataSink
UrlRequest
OverviewBuilderCallbackStatusStatusListener
UrlResponseInfo
OverviewHeaderBlockEnhanceyourappswith5GBuildclient-serverapplicationswithgRPC
Transferringdatawithoutdrainingthebattery
OverviewOptimizedownloadsforefficientnetworkaccessMinimizetheeffectofregularupdatesAvoidunoptimizeddownloadsModifypatternsbasedontheconnectivitytype
Reducenetworkbatterydrain
OverviewCollectingnetworktrafficdataAnalyzingdatatrafficOptimizenetworkaccessOptimizeuser-initiatednetworkuseOptimizeapp-initiatednetworkuseOptimizeserver-initiatednetworkuseOptimizinggeneralnetworkuse
TransferdatausingSyncAdapters
OverviewCreateaStubAuthenticatorCreateaStubContentProviderCreateaSyncAdapterRunaSyncAdapter
Bluetooth
OverviewSetupBluetoothFindBluetoothdevicesConnectBluetoothdevicesTransferBluetoothdataBluetoothpermissionsBluetoothprofilesCompaniondevicepairing
BluetoothLowEnergy
OverviewFindBLEdevicesConnecttoaGATTserverTransferBLEdata
NFC
OverviewNFCbasicsAdvancedNFCHost-basedcardemulationoverview
Telecom
OverviewBuildacallingappPreventcallerIDspoofingTelephonyIDs
Wi-Fi
Wi-FiscanningoverviewWi-Fipeer-to-peerWi-FiAwareoverviewWi-FilocationwithRTTLocalOnlyHotspot
Wi-Fiinfrastructure
Wi-FiinfrastructureoverviewWi-FisuggestionAPIforinternetconnectivityWi-FiNetworkRequestAPIforpeer-to-peerconnectivityPasspointSavenetworksandPasspointconfigurations
USB
OverviewAccessoryoverviewHostoverviewVPNSessioninitiationprotocoloverview
Discoverandconnect
OverviewUsenetworkservicediscoveryCreateP2PconnectionswithWi-FiUseWi-FiP2PforservicediscoveryWi-FiEasyConnectOpenMobileAPIreadersupport
Renderscript
OverviewAdvancedRenderScriptMigratefromRenderScript
RuntimeAPIreference
OverviewNumericaltypesObjecttypesConversionfunctionsMathematicalconstantsandfunctionsVectormathfunctionsMatrixfunctionsQuaternionfunctionsAtomicupdatefunctionsTimefunctionsandtypesAllocationdataaccessfunctionsObjectcharacteristicsfunctionsKernelinvocationfunctionsandtypesInput/outputfunctionsDebuggingfunctionsGraphicsfunctionsandtypesIndex
Web-basedcontent
OverviewBuildingwebappsinWebViewManagingWebViewobjectsLoadlocalcontentDarkenwebcontentUserprivacyinWebViewcrashreportingSupportingdifferentscreensinwebappsDebuggingwebappsBestpracticesforwebappsTestingagainstfutureversionsofWebView
AndroidAppBundles
OverviewConfigurethebasemoduleBuildandtestyourappbundleAddcodetransparencyTheappbundleformatFrequentlyaskedquestions
GooglePlay
GooglePlayBillingPlayCoreLibrary
PlayPoints
OverviewCreateproductsandpromotionsDetectanddeliverproductsTestproducts
PlayAssetDelivery
OverviewIntegrateassetdelivery(Kotlin&Java)Integrateassetdelivery(native)Integrateassetdelivery(Unity)TargettexturecompressionformatsTestassetdelivery
PlayFeatureDelivery
OverviewConfigureinstall-timedeliveryConfigureconditionaldeliveryConfigureon-demanddeliveryOn-demanddeliverybestpracticesConfigureinstantdeliveryAdditionalresources
In-appreviews
OverviewIntegrateusingKotlinorJavaIntegrateusingnativecodeIntegrateusingUnityTestin-appreviews
In-appupdates
OverviewSupportin-appupdates(KotlinorJava)Supportin-appupdates(Native)Supportin-appupdates(Unity)Testin-appupdates
GooglePlayInstant
OverviewofGooglePlayInstant
Getstartedwithinstantapps
Createaninstant-enabledappbundleUXbestpracticesforapps
Getstartedwithinstantgames
OverviewUnitypluginUXbestpracticesforgamesMigratetoAndroidAppBundlesImplementclouddeliveryofassetsSupportGooglePlayGamesServicesInstantPlaygamesInstantPlaygameschecklistReducethesizeofyourinstantapporgameAddadstoyourinstantapporgameProvidemultipleentrypoints
IntegratewithFirebase
AddGoogleAnalyticsforFirebasetoyourinstantappUseFirebaseDynamicLinkswithinstantappsTechnicalrequirementschecklistGooglePlayInstantpolicy
Resources
ReferenceCodesamplesSDKreleasenotesInstantAppIntents
Support
KnownissuesStackOverflowPlayDeveloperAPI
PlayInstallReferrer
Overview
PlayInstallReferrerLibrary
OverviewReferenceReleasenotesPlayInstallReferrerAPIPlayIntegrityAPI
PlayRequirements
PlayPoliciesTargetAPILevelSupport64-bitarchitectures
ApplicationLicensing
OverviewLicensingOverviewSettingUpforLicensingAddingServer-SideVerificationAddingClient-SideVerificationLicensingReferenceAPKExpansionFiles
AppActions
Slices
OverviewGettingStartedSlicetemplates
On-devicesearch
Games
Develop
Overview
AndroidGameDevelopmentKit(AGDK)
OverviewLibrariesDownloadReleasenotesAndroidStudio
AndroidGameDevelopmentExtensionforVisualStudio
OverviewQuickstartConfigureaprojectDebuggerMeasureappperformanceModifybuild.gradlefilesforAndroidStudioSamplesReleasenotes
AndroidGPUInspector
OverviewQuickstartSupporteddevices
Systemprofiling
OverviewViewasystemprofileGPUperformancecounters
Analyzeasystemprofile
FrameprocessingtimesMemoryefficiencyTexturememorybandwidthusageVertexmemorybandwidthusageThreadscheduling
Frameprofiling
Overview
Analyzeaframeprofile
MostexpensiverenderpassesVertexformatsShaderperformance
FrameProfilerUI
PerformancepaneCommandspaneFramebufferpaneGeometrypaneReportpaneShaderpaneMemorypaneStatepaneTexturespaneTexturepanePipelineviewpaneSupportedVulkanextensionsTroubleshootAndroidPerformanceTuner
MemoryAdviceAPI
OverviewGetstarted
Improve
ImprovegameperformanceReducegamesize
Improvedeviceavailability
Support64-bitarchitecturesSupportallscreens
GameMode
OverviewOptimizewithGameModeAPIGameModeinterventions
VulkanandOpenGL
3DassetoptimizationVulkanPrerotationVertexdatamanagement
Distribute
Overview
GooglePlayGamesServices
OverviewGetstartedDownloads
Features
AchievementsLeaderboardsEventsSavedgamesFriendsSign-in
PlayConsolesetup
SetupPlayGamesServicesEnablefeaturesTestandpublish
Developmenttasks
C++
Getstarted
Android
GetstartedSign-inEnableserver-sideaccess
Addfeatures
AchievementsLeaderboardsFriendsSavedgamesEventsPlayerstatsLoggingTroubleshooting
PublishingAPI
OverviewGetstartedUploadimagesManagementAPI
Requirementsandguidelines
QualitychecklistBrandingguidelinesQuotaandratelimitsDatadisclosurerequirementsTermsofservice
GooglePlayGamesforPC
OverviewGetstarted
Setupyourgame
PCcompatibilityGraphicsconfiguration
Deviceinput
Setupinput
InputSDK
OverviewQuickstart
Continuity
OverviewContinuityrequirementsVerifyingrequirementsExistingidentitysolutionsUsetheemulatorTestonChromeOS
Publishanddeploy
PackageSubmitFAQGooglePlayInstantPlayasyoudownload
Bestpractices
Testing
TestappsonAndroid
Fundamentals
FundamentalsoftestingAndroidappsWhattotestinAndroidUsingtestdoublesinAndroid
Localtests
Buildlocaltests
Instrumentedtests
BuildinstrumentedtestsAutomateUItests
AndroidXtestlibraries
SetupprojectforAndroidXTestJUnit4ruleswithAndroidXTestAndroidJUnitRunner
Espresso
EspressoEspressobasicsEspressosetupinstructionsEspressocheatsheetEspressoidlingresourcesEspresso-IntentsEspressolistsMultiprocessEspressoEspressorecipesEspressoWebAccessibilitycheckingAdditionalResourcesforEspresso
Testingothercomponents
TestcontentprovidersTestyourserviceWriteautomatedtestswithUIAutomator
Performance
OverviewPerformanceclass
AndroidVitals
OverviewStuckPartialWakeLocksExcessiveWakeupsExcessiveBackgroundWi-FiScansExcessiveBackgroundNetworkUsageANRsCrashesSlowRenderingFrozenFramesPermissionDenialsAppStartupTimeAppStandbyBucketsAppHibernationProcessesandThreadsOverviewBetterPerformancethroughThreading
OptimizingforBatteryLife
OverviewOptimizeforDozeandAppStandbyMonitorthebatterylevelandchargingstateMonitorconnectivitystatusandconnectionmeteringDetermineandmonitorthedockingstateandtypePowermanagementrestrictionsProfilebatteryusagewithBatterystatsandBatteryHistorianAnalyzepowerusewithBatteryHistorianTestingpower-relatedissuesReduceyourappsize
Managememory
OverviewofMemoryManagemementMemoryAllocationamongProcessesManageYourApp'sMemory
Systemtracing
OverviewCaptureatracefromthecommandlineCaptureatraceonadeviceNavigateareportDefinecustomeventsCustomtraceeventsinnativecodeInspectGPUrenderingDesigningforSeamlessnessKeepingYourAppResponsiveSMPPrimerforAndroidVerifyingAppBehaviorontheAndroidRuntime(ART)
Accessibility
Overview
Buildandtestappsforaccessibility
MakeappsmoreaccessiblePrinciplesforimprovingappaccessibilityTestyourapp'saccessibility
Advancedtopics
MakecustomviewsmoreaccessibleCreateyourownaccessibilityserviceAdditionalresources
Privacy
Privacybestpractices
Security
AppsecuritybestpracticesSecuritytipsSecuritywithdataSecuritywithdataacrossadditionalAndroidversionsSecuritywithHTTPSandSSLNetworksecurityconfigurationUpdatingyoursecurityprovidertoprotectagainstSSLexploits
ProtectingagainstsecuritythreatswithSafetyNet
OverviewSafetyNetAttestationAPISafetyNetSafeBrowsingAPISafetyNetreCAPTCHAAPISafetyNetVerifyAppsAPICryptographyAndroidKeystoreSystemVerifyinghardware-backedkeypairswithkeyattestationAndroidProtectedConfirmationSupportingDirectBootRunningembeddedDEXcodeAppsecurityimprovementprogram
BuildforBillions
OverviewConnectivityDevicecapabilityDatacostBatteryconsumptionUIandcontent
BuildforEnterprise
OverviewDeveloperguideWorkprofilesSetupmanagedconfigurations
Appfeedback
SendappfeedbacktoEMMsTestappfeedbackWorkcontactsDevicemanagementpolicies
Devicemanagement
OverviewBuildadevicepolicycontroller
Dedicateddevices
OverviewLocktaskmodeMultipleusersCookbookDevicecontrolNetworkingandtelephonySecuritySystemupdatesNetworkactivitylogging
Androidversions
OverviewAndroid12Android11Android10Android9Android8.0Android7.0Deviceadministration
AndroidDevelopers
Docs
Guides
GooglePlayIn-AppReviewAPI
TheGooglePlayIn-AppReviewAPIletsyoupromptuserstosubmitPlayStore
ratingsandreviewswithouttheinconvenienceofleavingyourapporgame.
Generally,thein-appreviewflow(seefigure1)canbetriggeredatanytime
throughouttheuserjourneyofyourapp.Duringtheflow,theuserhasthe
abilitytorateyourappusingthe1to5starsystemandtoaddanoptional
comment.Oncesubmitted,thereviewissenttothePlayStoreandeventually
displayed.
ToprotectuserprivacyandavoidAPImisuse,therearestrictguidelinesthat
yourappshouldfollowaboutwhentorequestin-appreviews
andthedesignofthereviewprompt.
Figure1.In-appreviewflowforauser
Devicerequirements
In-appreviewsonlyworkonthefollowingdevices:
Androiddevices(phonesandtablets)runningAndroid5.0(APIlevel21)or
higherthathavetheGooglePlayStoreinstalled.
ChromeOSdevicesthathavetheGooglePlayStoreinstalled.
PlayCorelibraryrequirements
Tointegratein-appreviewsinyourapp,yourappmustuseversion1.8.0or
higherofthePlayCorelibrary.
Whentorequestanin-appreview
Followtheseguidelinestohelpyoudecidewhentorequestin-appreviews
fromusers:
Triggerthein-appreviewflowafterauserhasexperiencedenoughofyourapp
orgametoprovideusefulfeedback.
Donotprompttheuserexcessivelyforareview.Thisapproachhelps
minimizeuserfrustrationandlimitAPIusage(seethesectionon
quotas).
Yourappshouldnotasktheuseranyquestionsbeforeorwhilepresentingthe
ratingbuttonorcard,includingquestionsabouttheiropinion(suchas“Doyou
liketheapp?”)orpredictivequestions(suchas“Wouldyouratethisapp5
stars”).
Designguidelines
Followtheseguidelinesasyoudeterminehowtointegratein-appreviewsinyour
app:
Surfacethecardas-is,withouttamperingormodifyingtheexistingdesignin
anyway,includingsize,opacity,shape,orotherproperties.
Donotaddanyoverlayontopofthecardoraroundthecard.
Thecardandthecard’sbackgroundshouldbeonthetopmostlayer.Oncethe
cardhassurfaced,donotprogrammaticallyremovethecard.Thecardisremoved
automaticallybasedoneithertheuser’sexplicitaction,oraninternalPlay
Storemechanism.
Quotas
Toprovideagreatuserexperience,GooglePlayenforcesatime-boundquotaon
howoftenausercanbeshownthereviewdialog.Becauseofthisquota,calling
thelaunchReviewFlowmethodmorethanonceduringashortperiodoftime(for
example,lessthanamonth)mightnotalwaysdisplayadialog.
Note:Thespecificvalueofthequotaisanimplementationdetail,anditcanbe
changedbyGooglePlaywithoutanynotice.
Becausethequotaissubjecttochange,it'simportanttoapplyyourownlogic
andtargetthebestpossiblemomenttorequestareview.Forexample,you
shouldnothaveacall-to-actionoption(suchasabutton)totriggertheAPI,
asausermighthavealreadyhittheirquotaandtheflowwon’tbe
shown,presentingabrokenexperiencetotheuser.Forthisusecase,redirect
theusertothePlayStoreinstead.
Integratein-appreviewsinyourapp
Learnhowtointegratein-appreviewsinyourapp,dependingonyourdevelopment
environment:
KotlinorJava
Native(C++)
Unity
ContentandcodesamplesonthispagearesubjecttothelicensesdescribedintheContentLicense.JavaandOpenJDKaretrademarksorregisteredtrademarksofOracleand/oritsaffiliates.
Lastupdated2021-07-17UTC.
[{
"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
Language
English
BahasaIndonesia
Español–AméricaLatina
Português–Brasil
中文–简体
日本語
한국어