Getting Started Building Your First App 整章都没什么内容,如果要看工程全部文件说明,看 这里 Creating an Android Project Running Your Application Building a Simple User Interface Starting Another Activity Supporting Different Devices Supporting Different Languages Supporting Different Screens Supporting Different Platform Versions Managing the Activity Lifecycle Starting an ActivityPausing and Resuming an ActivityStopping and Restarting an ActivityRecreating an Activity Building a Dynamic UI with Fragments Creating a FragmentBuilding a Flexible UICommunicating with Other Fragments Saving Data Saving Key-Value SetsSaving FilesSaving Data in SQL Databases Interacting with Other Apps Sending the User to Another AppGetting a Result from the ActivityAllowing Other Apps to Start Your Activity Working with System Permissions Declaring PermissionsRequesting Permissions at Run TimeBest Practices for Runtime Permissions Building Apps with Content Sharing Sharing Simple Data Sending Simple Data to Other AppsReceiving Simple Data from Other AppsAdding an Easy Share Action Sharing Files Setting Up File SharingSharing a FileRequesting a Shared FileRetrieving File Information Sharing Files with NFC Sending Files to Another DeviceReceiving Files from Another Device Building Apps with Multimedia Managing Audio Playback Controlling Your App's Volume and Playback Managing Audio Focus Dealing with Audio Output Hardware Capturing Photos Taking Photos SimplyRecording Videos SimplyControlling the Camera Printing Content PhotosHTML DocumentsCustom Documents Building Apps with Graphics & Animation Displaying Bitmaps Efficiently Loading Large Bitmaps EfficientlyProcessing Bitmaps Off the UI ThreadCaching BitmapsManaging Bitmap MemoryDisplaying Bitmaps in Your UI Displaying Graphics with OpenGL ES Building an OpenGL ES EnvironmentDefining ShapesDrawing ShapesApplying Projection and Camera ViewsAdding MotionResponding to Touch Events Animating Views Using Scenes and Transitions The Transitions FrameworkCreating a SceneApplying a TransitionCreating Custom Transitions Adding Animations Crossfading Two ViewsUsing ViewPager for Screen SlideDisplaying Card Flip AnimationsZooming a ViewAnimating Layout Changes Building Apps with Connectivity & the Cloud Connecting Devices Wirelessly Using Network Service DiscoveryCreating P2P Connections with Wi-FiUsing Wi-Fi P2P for Service Discovery Performing Network Operations Connecting to the NetworkManaging Network UsageParsing XML Data Transferring Data Without Draining the Battery Optimizing Downloads for Efficient Network AccessMinimizing the Effect of Regular UpdatesRedundant Downloads are RedundantModifying Patterns Based on the Connectivity Type Syncing to the Cloud Configuring Auto BackupUsing the Backup API Resolving Cloud Save Conflicts Transferring Data Using Sync Adapters Creating a Stub AuthenticatorCreating a Stub Content ProviderCreating a Sync AdapterRunning a Sync Adapter Transmitting Network Data Using Volley Sending a Simple RequestSetting Up a RequestQueueMaking a Standard RequestImplementing a Custom Request Building Apps with Location & Maps Making Your App Location-Aware Getting the Last Known LocationReceiving Location UpdatesDisplaying a Location AddressCreating and Monitoring Geofences Adding Maps Building Apps with User Info & Sign-In Accessing Contacts Data Retrieving a List of ContactsRetrieving Details for a ContactModifying Contacts Using IntentsDisplaying the Quick Contact Badge Adding Sign-In Building Apps for Wearables Adding Wearable Features to Notifications Creating a NotificationReceiving Voice Input in a NotificationAdding Pages to a NotificationStacking Notifications Creating Wearable Apps Creating and Running a Wearable AppCreating Custom LayoutsKeeping Your App VisibleAdding Voice CapabilitiesPackaging Wearable AppsDebugging over Bluetooth Creating Custom UIs Defining LayoutsCreating CardsCreating ListsCreating a 2D PickerShowing ConfirmationsExiting Full-Screen Activities Sending and Syncing Data Accessing the Wearable Data LayerSyncing Data ItemsTransferring AssetsSending and Receiving MessagesHandling Data Layer Events Creating Watch Faces Designing Watch FacesBuilding a Watch Face ServiceDrawing Watch FacesShowing Information in Watch FacesCreating Interactive Watch FacesProviding Configuration ActivitiesAddressing Common IssuesOptimizing Performance and Battery Life Detecting Location Requesting Permissions Using the Speaker Building Apps for TV Building TV Apps Getting Started with TV AppsHandling TV HardwareBuilding TV LayoutsCreating TV Navigation Building TV Playback Apps Creating a Catalog BrowserProviding a Card ViewBuilding a Details ViewDisplaying a Now Playing Card Helping Users Find Content on TV Recommending TV ContentMaking TV Apps SearchableSearching within TV Apps Building TV Games Building TV Channels Developing a TV Input ServiceWorking with Channel DataManaging User Interaction TV Apps Checklist Building Apps for Auto Getting Started with Auto Playing Audio for Auto Messaging for Auto Building Apps for Work Ensuring Compatibility with Managed Profiles Implementing App Restrictions Building a Device Policy Controller Best Practices for Interaction & Engagement Designing Effective Navigation Planning Screens and Their RelationshipsPlanning for Multiple Touchscreen SizesProviding Descendant and Lateral NavigationProviding Ancestral and Temporal NavigationPutting it All Together: Wireframing the Example App Implementing Effective Navigation Creating Swipe Views with TabsCreating a Navigation DrawerProviding Up NavigationProviding Proper Back NavigationImplementing Descendant Navigation Notifying the User Building a NotificationPreserving Navigation when Starting an ActivityUpdating NotificationsUsing Big View StylesDisplaying Progress in a Notification Supporting Swipe-to-Refresh Adding Swipe-to-Refresh To Your AppResponding to a Refresh Gesture Adding Search Functionality Setting up the Search InterfaceStoring and Searching for DataRemaining Backward Compatible Making Your App Content Searchable by Google Enabling Deep Links for App ContentSpecifying App Content for Indexing Optimizing Content for the Assistant Handling App Links Best Practices for User Interface Designing for Multiple Screens Supporting Different Screen SizesSupporting Different Screen DensitiesImplementing Adaptive UI Flows Adding the App Bar Setting Up the App BarAdding and Handling ActionsAdding an Up ActionAction Views and Action Providers Showing Pop-Up Messages Building and Displaying a Pop-Up MessageAdding an Action to a Message Creating Custom Views Creating a Custom View ClassImplementing Custom DrawingMaking the View InteractiveOptimizing the View Creating Backward-Compatible UIs Abstracting the New APIsProxying to the New APIsCreating an Implementation with Older APIsUsing the Version-Aware Component Implementing Accessibility Developing Accessible ApplicationsDeveloping Accessibility Services Managing the System UI Dimming the System BarsHiding the Status BarHiding the Navigation BarUsing Immersive Full-Screen ModeResponding to UI Visibility Changes Creating Apps with Material Design Getting StartedUsing the Material ThemeCreating Lists and CardsDefining Shadows and Clipping ViewsWorking with DrawablesDefining Custom AnimationsMaintaining Compatibility Best Practices for User Input Using Touch Gestures Detecting Common GesturesTracking MovementAnimating a Scroll GestureHandling Multi-Touch GesturesDragging and ScalingManaging Touch Events in a ViewGroup Handling Keyboard Input Specifying the Input Method TypeHandling Input Method VisibilitySupporting Keyboard NavigationHandling Keyboard Actions Supporting Game Controllers Handling Controller ActionsSupporting Controllers Across Android VersionsSupporting Multiple Game Controllers Best Practices for Background Jobs Running in a Background Service Creating a Background ServiceSending Work Requests to the Background ServiceReporting Work Status Loading Data in the Background Running a Query with a CursorLoaderHandling the Results Managing Device Awake State Keeping the Device AwakeScheduling Repeating Alarms Best Practices for Performance Managing Your App's Memory Performance Tips Improving Layout Performance Optimizing Layout HierarchiesRe-using Layouts with <include/>Loading Views On DemandMaking ListView Scrolling Smooth Optimizing Battery Life Optimizing for Doze and App StandbyMonitoring the Battery Level and Charging StateDetermining and Monitoring the Docking State and TypeDetermining and Monitoring the Connectivity StatusManipulating Broadcast Receivers On Demand Sending Operations to Multiple Threads Specifying the Code to Run on a ThreadCreating a Manager for Multiple ThreadsRunning Code on a Thread Pool ThreadCommunicating with the UI Thread Keeping Your App Responsive JNI Tips SMP Primer for Android Best Practices for Security & Privacy Security Tips Security with HTTPS and SSL Updating Your Security Provider to Protect Against SSL Exploits Checking Device Compatibility with SafetyNet Enhancing Security with Device Management Policies Best Practices for Testing Testing Your Activity Setting Up Your Test EnvironmentCreating and Running a Test CaseTesting UI ComponentsCreating Unit TestsCreating Functional Tests Automating UI Tests Testing UI for a Single AppTesting UI for Multiple Apps Building Effective Unit Tests Building Local Unit TestsBuilding Instrumented Unit Tests Testing Display Performance Using Google Play to Distribute & Monetize Selling In-app Products Preparing Your AppEstablishing Products for SalePurchasing ProductsTesting Your App Maintaining Multiple APKs Creating Multiple APKs for Different API LevelsCreating Multiple APKs for Different Screen SizesCreating Multiple APKs for Different GL TexturesCreating Multiple APKs with 2+ Dimensions