•  


페이지를 파싱하기 어렵습니다.tag:blogger.com,1999:blog-6755709643044947179 2024-04-17T12:09:14.130-07:00 Android Developers Blog An Open Handset Alliance Project. Ian Lake http://www.blogger.com/profile/17415160793077313560 noreply@blogger.com Blogger 1644 1 25 tag:blogger.com,1999:blog-6755709643044947179.post-71695456219242480 2024-04-17T09:00:00.000-07:00 2024-04-17T09:18:56.150-07:00 How to effectively A/B test power consumption for your Android app’s features <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA0vd4Jjzz-DSu2_AQwcnJyoHCeT15o9fq6G8bddSCbYk_F6wzz6uuW_5BsiZdondCWVXK9kDlLkKoPeLAtwEcsBGHn67_oIuEgyW28u4OsdzHISmcvKAsrmcGzoRZl-hOD5T1SVvzrGdF1OGeXqK6-GbkqU0zV9etBfyTYDIrQW4fVFgwrrhT4xDy3mQ/s1600/Power-Profiler-Pro-Social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA0vd4Jjzz-DSu2_AQwcnJyoHCeT15o9fq6G8bddSCbYk_F6wzz6uuW_5BsiZdondCWVXK9kDlLkKoPeLAtwEcsBGHn67_oIuEgyW28u4OsdzHISmcvKAsrmcGzoRZl-hOD5T1SVvzrGdF1OGeXqK6-GbkqU0zV9etBfyTYDIrQW4fVFgwrrhT4xDy3mQ/s1600/Power-Profiler-Pro-Social.png" style="display: none;" /> <em>Posted by Mayank Jain - Product Manager, and Yasser Dbeis - Software Engineer; Android Studio </em> <div><br /></div> <p>Android developers have been telling us they're looking for tools to help optimize power consumption for different devices on Android.</p> <p>The new <a href="https://developer.android.com/studio/profile/power-profiler" target="_blank">Power Profiler</a> in Android Studio helps Android developers by showing power consumption happening on devices as the app is being used. Understanding power consumption across Android devices can help Android developers identify and fix power consumption issues in their apps. They can run A/B tests to compare the power consumption of different algorithms, features or even different versions of their app.</p> <image><div style="text-align: center;"><img alt="The new Power Profiler in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho7zC3SQM_nmra_12UstVke6CJRGM6_OshsgmQFKpRQTTOeWDni2MVLUWy7tK_gH3jrvG-dUAEbJcjQVw9OdRdroy4k0VFXtfwGmtZ9qi3RAHhNYCo4B53uid9I8p1rzrrvcr585u1bL9HYvNrrWz-D1domukWvAC40agJVsM8b7N5LIEGNNuEQiJOsOs/s1600/image1.png" width="100%" /></div><imgcaption><center><em>The new Power Profiler in Android Studio</em></center></imgcaption></image> <p>Apps which are optimized for lower power consumption lead to an improved battery and thermal performance of the device, which means an improved user experience on Android.</p> <p>This power consumption data is made available through the On Device Power Monitor (ODPM) on Pixel 6+ devices, segmented by each sub-system called “Power Rails”. See <a href="https://developer.android.com/studio/profile/power-profiler#power-rails" target="_blank">Profileable power rails</a> for a list of supported sub-systems.</p> <blockquote><p>The Power Profiler can help app developers detect problems in several areas:</p> <ul><ul> <li>Detecting unoptimized code that is using more power than necessary.</li> <li>Finding background tasks that are causing unnecessary CPU usage.</li> <li>Identifying wakelocks that are keeping the device awake when they are not needed.</li> </ul></ul></blockquote> <p>Once a power consumption issue has been identified, the Power Profiler can be used when testing different hypotheses to understand why the app could be consuming excessive power. For example, if the issue is caused by background tasks, the developer can try to stop the tasks from running unnecessarily or for longer periods. And if the issue is caused by wakelocks, the developer can try to release the wakelocks when the resource is not in use or use them more judiciously. Then compare the power consumption before/after the change using the Power Profiler.</p> <p>In this blog post, we showcase a technique which uses A/B testing to understand how your app’s power consumption characteristics might change with different versions of the same feature - and how you can effectively measure them.</p> <h3>A real-life example of how the Power Profiler can be used to improve the battery life of an app.</h3> <p>Let’s assume you have an app through which users can purchase their favorite movies.</p> <image><div style="text-align: center;"><img alt="Sample app to demonstrate A/B testing for measure power consumption" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKuZEGcP6XVxijlnx2EAp8fe0dz5L5i3ZIfQtrXW0wzZVmOU7_59d3i0yVLu0SKMWlQZql0YY9Ea9mrU2YkThhYnuhodLuSq_k4vknszPy-Lv2JXNsvRqmMTHK5uMW2HlflrMn78IebefvmG9ASrvMW46xBYMY8oqIQy1qGXx2nTdjwuphYKi7Aw-InE/s1600/image4.png" width="45%" /></div><imgcaption><center><em>Sample app to demonstrate A/B testing for measure power consumption&nbsp;</em></center><center><em><span style="font-size: x-small;">Video (c) copyright Blender Foundation | www.bigbuckbunny.org</span></em></center></imgcaption></image><br /> <p>As your app becomes popular and is used by more users, you realize that a high quality 4K video takes very long to load every time the app is started. Because of its large size, you want to understand its impact on power consumption on the device.</p> <p>Originally, this video was in 4K quality in the best of intentions, so as to showcase the best possible movie highlights to your customers.</p> <p>This makes you think…</p> <ul><ul> <li>Do you really need a 4K video banner on the home screen? </li> <li>Does it make sense to load a 4K video over the network every time your app is run?</li> <li>How will the power consumption characteristics of your app change if you replace the 4K video with something of lower quality (while still preserving the vivid look &amp; feel of the video)?</li> </ul></ul> <h3>This is a perfect scenario to perform an A/B test for power consumption</h3> <p>With an A/B test, you can test two slightly different variations of the video banner feature and choose the one with the better power consumption characteristics.</p> <p><b>Scenario A :</b> Run the app with 4K video banner on screen &amp; measure power consumption</p> <p><b>Scenario B :</b> Run the app with lower resolution video banner on screen &amp; measure power consumption</p> <h4 style="text-align: left;"><span style="font-size: large;">A/B Test setup</span></h4> <p>Let's take a moment and set up our Android Studio profiler to run this A/B test. We need to start the app and attach the CPU profiler to it and trigger a system trace (where the Power Profiler will be shown).</p> <p><b>Step 1</b></p> <p>Create a custom “Run configuration” by clicking the 3 dot menu &gt; Edit</p> <image><div style="text-align: center;"><img alt="Custom run configuration" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTgKDs_bMvAvkdyUPPzvGb7vSbEYPzA46qouzJAyF9QlUq7m5wFmJhIpj3k9uhaaDZ5pSeCxUOqb-RfbiFG50v8614z6Q9GS9OGnhW6d8RSuBYHQf4hnOftGzrssRMnLXPfWEsiP-gPQrLH0MBDCwfDfyNgSME1zYV-cUdn60qQ7mcbdag7kQIMIt0klc/s1600/image8.png" width="100%" /></div><imgcaption><center><em>Custom run configuration</em></center></imgcaption></image> <p><b>Step 2</b></p> <p>Then select the “Profiling” tab and ensure that “Start this recording on startup” and CPU Activity &gt; System Trace is selected. Then click “Apply”.</p> <image><div style="text-align: center;"><img alt="Edit configuration settings" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTpoe9Wq-VtcCI6kPxTZfDtlu_qJ-mXl8dvlgXeVIRfjS4iQSbAN1gKtP7L_p1EZK9CGHCQF7f9F9cLU6sgnnICf_Gu4eCHbLaIIF0Cg12pCB0VBStByhvQkaiDhdPOKPQjbtB5JEFMKWtuP68K9oGKrcIx-5vXR1GqPpqA4vc4IxOMMckOeaOPKg3_4s/s1600/image6.png" width="100%" /></div><imgcaption><center><em>Edit configuration settings</em></center></imgcaption></image><br /> <p>Now simply run the “Profile app startup profiling with low overhead” whenever you want to run this app from start and attach the CPU profiler to it.</p> <h3>Note on precision</h3> <p>The following example scenarios use the entire app startup for estimating the power consumption for this blog’s purpose. However you can use more advanced techniques to have even higher precision in getting power readings. Some techniques to try are:</p> <ul><ul> <li>Isolate and measure power consumption for video playback only after a tap event on the video player</li> <li>Use the <a href="https://developer.android.com/reference/android/os/Trace" target="_blank">trace markers API</a> to mark the start and stop time for power measurement timeline - and then only measure power consumption within that marked window</li> </ul></ul> <h4 style="text-align: left;"><span style="font-size: large;">Scenario A </span></h4> <p>In this scenario, we run the app with 4K video playing and measure power consumption for the first 30 seconds. We can optionally also run the scenario A multiple times and average out the readings. Once the System trace is shown in Android Studio, select the 0-30 second time range from the timeline selection panel and record as a screenshot for comparing against scenario B</p> <image><div style="text-align: center;"><img alt="Power consumption in scenario A - playing a 4k video" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmfA89nfK7p-pWlznyxhosGNG8s5AUJlJRbFzWYk4WG-7pJIcv4L9sRkziWAHp3u8K8dxnNBQKKNZOkAe24qkdnFjfFuHF4Hb77V3uNCU7dVndRBypGfgRbybGrFGvc63egMGkE29H3boiwLrcZa5Ka21mANV_4qOYMFKD9QwdbDnZ3iazsQw1aAHZun0/s1600/image2.png" width="100%" /></div><imgcaption><center><em>Power consumption in scenario A - playing a 4k video</em></center></imgcaption></image><br /> <p>As you can see, the average power consumed by WLAN, CPU cores &amp; Memory combined is about 1,352 mW (milliwatts)</p> <p>Now let's compare and contrast how this power consumption changes in Scenario B</p> <h4 style="text-align: left;"><span style="font-size: large;">Scenario B </span></h4> <p>In this scenario, we run the app with low quality video playing and measure power consumption for the first 30 seconds. As before, we can also optionally run scenario B multiple times and average out the power consumption readings. Again, once the System trace is shown in Android Studio, select the 0-30 second time range from the timeline selection panel.</p> <image><div style="text-align: center;"><img alt="Power consumption in scenario B - playing a lower quality video" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCygqf2MCa0rrN4il8ABCqxkmjMLBlqEg8hnpm9aDtnpRHii7n1gvSbyNpwzw5LIrLE-U2ob6jnZouZvKyNnqTZd95EY3n3JMmGC8f8gEzgHUeTCqJXbyDVTGkf4pRFITjrcggwxpViTrWTqBPvP5oH1aB6vsb-Nkfu0obGhRCwQJuU2uCCUKiSu9RGpQ/s1600/image5.png" width="100%" /></div><imgcaption><center><em>Power consumption in scenario B - playing a lower quality video</em></center></imgcaption></image> <p>The total power consumed by WLAN, CPU Little, CPU Big and CPU Mid &amp; Memory is about 741 mW (milliwatts)</p> <h3>Conclusion</h3> <p>All else being equal, Scenario B (with lower quality video) consumed 741 mW power as compared to Scenario A (with 4K video) which required 1,352 mW power.</p> <p>Scenario B (lower quality video) took 45% less power than Scenario A (4K) - while the lower quality video provides little to no visual difference in perceived quality of the app’s screen.</p> <p>As a result of this A/B test for power consumption, you conclude that replacing the 4K video with a lower quality video on our app’s home screen not only reduces power consumption by 45%, also reduces the required network bandwidth and can potentially also improve the thermal performance of the devices.</p> <p>If your app’s business logic still requires the 4K video to be shown on the app’s screen, you can explore strategies like:</p> <ul><ul> <li>Caching the 4K video across subsequent runs of the app.</li> <li>Loading video on a user tap.</li> <li>Loading an image initially and only load the video after the screen has fully rendered (delayed loading).</li> </ul></ul> <p>The overall power consumption numbers presented in the above A/B test scenario might seem small, but it shows the techniques that app developers can use to effectively A/B test power consumption for their app’s features using the Power Profiler in Android Studio.</p> <h3>Next Steps</h3> <p>The new Power Profiler is available in <a href="https://developer.android.com/studio/releases/past-releases/as-hedgehog-release-notes#new-power-profiler" target="_blank">Android Studio Hedgehog</a> onwards. To know more, please head over to the <a href="https://developer.android.com/studio/profile/power-profiler" target="_blank">official documentation</a>.</p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-8627810855639155004 2024-04-11T13:00:00.000-07:00 2024-04-11T13:21:44.295-07:00 The First Beta of Android 15 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW1UxJk2BEGQu-9eSLY0fV6wrCb0FJTo_-rMykFO0wUDajMwXeF7CgXx9MBKZcOLhd5bOikhbK9PWvM3aYfncnDn_Lba0ASuchSeKbpt4ZWcmcEHDK8_W6-_C2DnWs3T7v1DPk2EtTAH_amWewikG5f9NDadQSJ6DbcwiTKEG0XtlO_f250KaNRz76Jcg/s1600/AD-15-Developer-Preview.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW1UxJk2BEGQu-9eSLY0fV6wrCb0FJTo_-rMykFO0wUDajMwXeF7CgXx9MBKZcOLhd5bOikhbK9PWvM3aYfncnDn_Lba0ASuchSeKbpt4ZWcmcEHDK8_W6-_C2DnWs3T7v1DPk2EtTAH_amWewikG5f9NDadQSJ6DbcwiTKEG0XtlO_f250KaNRz76Jcg/s1600/AD-15-Developer-Preview.png" style="display: none;" /> <em> Posted by <a href="https://twitter.com/davey_burke" target="_blank">Dave Burke</a>, VP of Engineering </em> <div class="separator" style="border: 0px; clear: both; float: right; padding: 0px; width: 45%;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" style="display: block; padding: 1em 0px; text-align: center;"><br /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Android 14 logo" border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" width="320" /></a></div> <p><br /></p><p>Today we're releasing the first beta of Android 15. With the progress we've made refining the features and stability of Android 15, it's time to open the experience up to both developers and early adopters, so you can now <a href="https://www.google.com/android/beta" target="_blank">enroll any supported Pixel device here</a> to get this and future Android 15 Beta and feature drop Beta updates over-the-air.</p> <p>Android 15 continues our work to build a platform that helps improve your productivity, give users a premium app experience, <a href="https://developer.android.com/privacy-and-security/about" target="_blank">protect user privacy and security</a>, and make your app accessible to as many people as possible ? all in a vibrant and diverse ecosystem of devices, silicon partners, and carriers.</p> <p>Android delivers enhancements and new features year-round, and your feedback on the <a href="https://www.google.com/android/beta" target="_blank">Android beta</a> program plays a key role in helping Android continuously improve. The <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a> has lots more information about the beta, including <a href="https://developer.android.com/about/versions/15/download" target="_blank">downloads for Pixel</a> and the <a href="https://developer.android.com/about/versions/15/overview#timeline" target="_blank">release timeline</a>. We’re looking forward to <a href="https://developer.android.com/about/versions/15/feedback" target="_blank">hearing what you think</a>, and thank you in advance for your continued help in making Android a platform that works for everyone.</p> <p>We’ll have lots more to share as we move through the release cycle, and be sure to tune into <a href="https://io.google/2024/" target="_blank">Google I/O</a> where you can dive deeper into topics that interest you with over 100 sessions, workshops, codelabs, and demos.</p> <h3>Edge-to-edge</h3> <p>Apps targeting Android 15 are displayed <a href="https://developer.android.com/about/versions/15/behavior-changes-15#window-insets" target="_blank">edge-to-edge by default</a> on Android 15 devices. This means that apps no longer need to explicitly call <a href="https://developer.android.com/reference/androidx/core/view/WindowCompat#setDecorFitsSystemWindows%28android.view.Window,boolean%29" target="_blank"><span style="font-family: courier;">Window.setDecorFitsSystemWindows(false)</span></a> or <a href="https://developer.android.com/reference/androidx/activity/ComponentActivity#%28androidx.activity.ComponentActivity%29.enableEdgeToEdge%28androidx.activity.SystemBarStyle,androidx.activity.SystemBarStyle%29" target="_blank"><span style="font-family: courier;">enableEdgeToEdge()</span></a> to show their content behind the system bars, although we recommend continuing to call <span style="color: #0d904f; font-family: courier;">enableEdgeToEdge()</span> to get the edge-to-edge experience on earlier Android releases.</p> <p>To assist your app with going edge-to-edge, <a href="https://developer.android.com/develop/ui/compose/layouts/insets#inset-handling" target="_blank">many of the Material 3 composables</a> handle insets for you, based on how the composables are placed in your app according to the Material specifications.</p> <image><div style="text-align: center;"><img alt="a side-by-side comparison of App targets SDK 34 (left) and App targets SDK 35 (right) demonstrating edge-to-edge on an Android 15 device" border="0" height="256" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKdl8xQlPbo3KV4OdjTXDbYqYB6pa79ZdHufkosNJknB724uMn6X51izHYacqIzybKdnDhNA5tAbBD7zGrWg5AbO2HklLe_3w_NZU6KouuioIk_31JQFN-HU8xjHOVHFeVCJwbMCNE58x8zvjPMhJ9KibYroCylqaRNz8BmFsN1KLg_aNdWG_bRs3uGTk/w640-h256/AD15Beta1-Inline%20(2000%20x%20800%20px).gif" width="640" /></div><imgcaption><center><em>On the left: App targets SDK 34 (Android 14) and is not edge-to-edge on an Android 15 device. On the right: App targets SDK 35 (Android 15) and is edge-to-edge on an Android 15 device. Note the Material 3 TopAppBar is automatically protecting the status bar, which would otherwise be transparent by default.</em></center></imgcaption></image><br /> <p>The system bars are transparent or translucent and content will draw behind by default. Refer to "<a href="https://developer.android.com/develop/ui/views/layout/edge-to-edge#handle-overlaps" target="_blank">Handle overlaps using insets</a>" (Views) or <a href="https://developer.android.com/develop/ui/compose/layouts/insets" target="_blank">Window insets in Compose</a> to see how to prevent important touch targets from being hidden by the system bars.</p> <h3>Smoother NFC experiences - part 2</h3> <p>Android 15 is working to make the tap to pay experience more seamless and reliable while continuing to support Android's robust NFC app ecosystem. In addition to the <a href="https://developer.android.com/reference/android/nfc/NfcAdapter#setObserveModeEnabled%28boolean%29" target="_blank">observe mode</a> changes from Android 15 developer preview 2, apps can now register a fingerprint on supported devices so they can be notified of polling loop activity, which allows for smooth operation with multiple NFC-aware applications.</p> <h3>Inter-character justification</h3> <p>Starting with Android 15, text can be justified utilizing letter spacing by using <a href="https://developer.android.com/reference/android/text/Layout#JUSTIFICATION_MODE_INTER_CHARACTER" target="_blank"><span style="font-family: courier;">JUSTIFICATION_MODE_INTER_CHARACTER</span></a>. Inter-word justification was first introduced in Android O, but inter-character solves for languages that use the white space for segmentation, e.g. Chinese, Japanese, etc.</p> <center><a href="https://developer.android.com/reference/android/text/Layout#JUSTIFICATION_MODE_NONE" target="_blank"><span style="font-family: courier;">JUSTIFICATION_MODE_NONE</span></a></center> <image><div style="text-align: center;"><img alt="image shows how japanese kanji (top) and english alphabet characters (bottom) appear with JUSTIFICATION_MODE_NONE" border="0" height="160" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpGaXOrhGVfwbldBImkvGWLQ_9ziSlMQn7jv0k5DGDWkQyD5uOFfDIcTc9GoUocfUNf_BP9dPFDZToCCmCm7GsBb5wjdj2aTAT575XFJV2yIOitNNf3qqVt11AZwU8gsp8Yd4n7ZHLg5zneOalBYd9_zSLOcJYOHYAVbuBk-piw5algGXe2oz2TVa-cm0/s1600/Screenshot%202024-04-11%20at%2010.53.17%E2%80%AFAM.png" width="400" /></div></image> <center><a href="https://developer.android.com/reference/android/text/Layout#JUSTIFICATION_MODE_INTER_WORD" target="_blank"><span style="font-family: courier;">JUSTIFICATION_MODE_INTER_WORD</span></a></center> <image><div style="text-align: center;"><img alt="image shows how japanese kanji (top) and english alphabet characters (bottom) appear with JUSTIFICATION_MODE_INTER_WORD" border="0" height="160" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPUwmtF2LjxNUP3wjDvest2geZ0_OWMATc9RSl1U7OBIzrlsGJ1-_neEWQZPW0eFQ7DHMv0Y6Or_Vc1XZ8o0CJMilDDGJAsLu27iK1e6FALMPxSs1Pdzg2JoCzmgiJGUaiDzNVs-KBdNBSPTCPmOee10OXPhYWwldAn9sE0MpKaLY-V1dutQ2N7FrwYnA/s1600/Screenshot%202024-04-11%20at%2010.55.15%E2%80%AFAM.png" width="400" /></div></image> <center><a href="https://developer.android.com/reference/android/text/Layout#JUSTIFICATION_MODE_INTER_CHARACTER" target="_blank"><span style="font-family: courier;">JUSTIFICATION_MODE_INTER_CHARACTER</span></a></center> <image><div style="text-align: center;"><img alt="image shows how japanese kanji (top) and english alphabet characters (bottom) appear with JUSTIFICATION_MODE_INTER_WORD" border="0" height="160" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMiU1AkAp063awk-c6fRqy9GlFiQKgBqTduFrtE5gaHH4WHyMWoHvk1zvr6ruWxdiGUKQhXA8ZAQ6EyBV4-CgO6SvjscpPkMujWFo_q-hWGEGxkisLOJRaQV7VECj2O9ZKoqVOzavrTVqhKfqvjMos1WeGfUb8RVluhpzqKC7mvIcDYXomM6G-TGh6Iz8/s1600/Screenshot%202024-04-11%20at%2010.56.32%E2%80%AFAM.png" width="400" /></div></image> <h3>App archiving</h3> <p><a href="https://android-developers.googleblog.com/2023/04/reduce-uninstalls-for-your-app-with-auto-archive.html" target="_blank">Android and Google Play announced support for app archiving last year</a>, allowing users to free up space by partially removing infrequently used apps from the device that were published using Android App Bundle on Google Play. Android 15 now includes OS level support for app archiving and unarchiving, making it easier for all app stores to implement it.</p> <p>Apps with the <a href="https://developer.android.com/reference/android/Manifest.permission#REQUEST_DELETE_PACKAGES" target="_blank"><span style="font-family: courier;">REQUEST_DELETE_PACKAGES</span></a> permission can call the <a href="https://developer.android.com/reference/android/content/pm/PackageInstaller#requestArchive(java.lang.String,%20android.content.IntentSender)" target="_blank"><span style="font-family: courier;">PackageInstaller requestArchive</span></a> method to request archiving a currently installed app package, which removes the APK and any cached files, but persists user data. Archived apps are returned as displayable apps through the <a href="https://developer.android.com/reference/android/content/pm/LauncherApps" target="_blank"><span style="font-family: courier;">LauncherApps</span></a> APIs; users will see a UI treatment to highlight that those apps are archived. If a user taps on an archived app, the responsible installer will get a request to <a href="https://developer.android.com/reference/android/content/pm/PackageInstaller#requestUnarchive(java.lang.String,%20android.content.IntentSender)" target="_blank">unarchive</a> it, and the restoration process can be monitored by the <a href="https://developer.android.com/reference/android/content/Intent#ACTION_PACKAGE_ADDED" target="_blank"><span style="font-family: courier;">ACTION_PACKAGE_ADDED</span></a> broadcast. </p><h3>App-managed profiling</h3> <p>Android 15 includes the all new <a href="https://developer.android.com/reference/android/os/ProfilingManager" target="_blank"><span style="font-family: courier;">ProfilingManager</span></a> class, which allows you to collect profiling information from within your app. We're planning to wrap this with an Android Jetpack API that will simplify construction of profiling requests, but the core API will allow the collection of heap dumps, heap profiles, stack sampling, and more. It provides a callback to your app with a supplied tag to identify the output file, which is delivered to your app's files directory. The API does rate limiting to minimize the performance impact.</p> <h3>Better Braille</h3> <p>In Android 15, we've made it possible for <a href="https://developer.android.com/guide/topics/ui/accessibility/testing#talkback" target="_blank"><span style="font-family: courier;">TalkBack</span></a> to support Braille displays that are using the HID standard over both USB and secure Bluetooth.</p> <p>This standard, much like the one used by mice and keyboards, will help Android support a wider range of Braille displays over time.</p> <h3>Key management for end-to-end encryption</h3> <p>We are introducing the <a href="https://developer.android.com/reference/android/provider/E2eeContactKeysManager" target="_blank"><span style="font-family: courier;">E2eeContactKeysManager</span></a> in Android 15, which facilitates end-to-end encryption (E2EE) in your Android apps by providing an OS-level API for the storage of cryptographic public keys.</p> <p>The <span style="color: #0d904f; font-family: courier;">E2eeContactKeysManager</span> is designed to integrate with the platform contacts app to give users a centralized way to manage and verify their contacts' public keys.</p> <h3>Secured background activity launches</h3> <p>Android 15 brings additional changes to prevent malicious background apps from bringing other apps to the foreground, elevating their privileges, and abusing user interaction, aiming to protect users from malicious apps and give them more control over their devices. Background activity launches have been restricted since Android 10.</p> <h3>App compatibility</h3> <p>With Android 15 now in beta, we're opening up access to early-adopter users as well as developers, so if you haven't yet tested your app for compatibility with Android 15, now is the time to do it. In the weeks ahead, you can expect more users to try your app on Android 15 and raise issues they find.</p> <p>To test for compatibility, install your published app on a device or emulator running Android 15 beta and work through all of your app's flows. Review the behavior changes to focus your testing. After you've resolved any issues, publish an update as soon as possible.</p> <p>To give you more time to plan for app compatibility work, we’re letting you know our Platform Stability milestone well in advance.</p> <image></image><p></p><div style="text-align: center;"><img alt="Android 15 release timeline" border="0" height="160" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaUR-ASyFMuwI_0asfloIuAwn_sfGnjPsjaffK17u3o9vHOZuqmKNGy-4Gl_9ESAVqT6sEJTEHKB2rb0rEcqC7VvM0nDcYWdbrB__5PKO4QL67RDz5cEJmi5d2-fJol4Nq_0v1KVg_ffIoXMT6rytBRM5hjQJ_8-dmPBKmPWAlwn64h4hP4Tsa9Pcfgx0/s1600/image9.png" width="100%" /></div> <p>At this milestone, we’ll deliver final SDK/NDK APIs and also final internal APIs and app-facing system behaviors. We’re expecting to reach Platform Stability in June 2024, and from that time you’ll have several months before the official release to do your final testing. The release timeline details are <a href="https://developer.android.com/about/versions/15/overview#timeline" target="_blank">here</a>.</p> <h1 style="text-align: left;"><span style="font-size: x-large;">Get started with Android 15</span></h1> <p>Today's beta release has everything you need to try the Android 15 features, test your apps, and give us <a href="https://developer.android.com/about/versions/15/feedback" target="_blank">feedback</a>. Now that we've entered the beta phase, you can <a href="https://www.google.com/android/beta" target="_blank">enroll any supported Pixel device here</a> to get this and future Android Beta updates over-the-air. If you don’t have a Pixel device, you can <a href="https://developer.android.com/about/versions/15/get#on_emulator" target="_blank">use the 64-bit system images with the Android Emulator</a> in Android Studio. If you're already in the <a href="https://developer.android.com/about/versions/14/get-qpr" target="_blank">Android 14 QPR beta program</a> on a supported device, or have installed the developer preview, you'll automatically get updated to Android 15 Beta 1.</p> <blockquote><p>For the best development experience with Android 15, we recommend that you use the <a href="https://developer.android.com/studio/preview" target="_blank">latest version of Android Studio Jellyfish</a> (or more recent Jellyfish+ versions). Once you’re <a href="https://developer.android.com/about/versions/15/setup-sdk" target="_blank">set up</a>, here are some of the things you should do:</p> <ul style="text-align: left;"><ul> <li>Try the new features and APIs - your feedback is critical during the early part of the developer preview and beta program. Report issues in our tracker on the <a href="https://developer.android.com/about/versions/15/feedback" target="_blank">feedback page</a>.</li></ul></ul> <ul style="text-align: left;"><ul><li>Test your current app for compatibility - learn whether your app is affected by changes in Android 15; install your app onto a device or emulator running Android 15 and extensively test it.</li> </ul></ul></blockquote> <p>We’ll update the beta system images and SDK regularly throughout the Android 15 release cycle. Read more <a href="https://developer.android.com/about/versions/15/overview#pixel" target="_blank">here</a>.<br /> </p><p>For complete information, visit the <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a>.</p><br /> <p><em><small>Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.</small></em></p> <p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-1834626848477616065 2024-04-09T12:00:00.000-07:00 2024-04-10T08:05:18.512-07:00 Google Drive cut code and development time in half with Jetpack Compose and new architecture <meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-uWcB7FULeHyYVbosbQYPomkmCS1D1r4GJVTxaFMMa3zsQIEi3YS03p6gXAoELZkraqKgTFwCnIosIC8OTqD0WUdWRHt69lngvhEAA0GhRHdWX37zeK_rbRXt_JC1RuRG35U_zizzTi3HwqkA5rvhJ_W0VPuRLCSraAVokMt7dNXIf551oJ-XNy1biWA/s1600/image1.gif"> <img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-uWcB7FULeHyYVbosbQYPomkmCS1D1r4GJVTxaFMMa3zsQIEi3YS03p6gXAoELZkraqKgTFwCnIosIC8OTqD0WUdWRHt69lngvhEAA0GhRHdWX37zeK_rbRXt_JC1RuRG35U_zizzTi3HwqkA5rvhJ_W0VPuRLCSraAVokMt7dNXIf551oJ-XNy1biWA/s1600/image1.gif"> <em>Posted by Nick Butcher ? Product Manager for Jetpack Compose, and Florina Muntenescu ? Developer Relations Engineer</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-uWcB7FULeHyYVbosbQYPomkmCS1D1r4GJVTxaFMMa3zsQIEi3YS03p6gXAoELZkraqKgTFwCnIosIC8OTqD0WUdWRHt69lngvhEAA0GhRHdWX37zeK_rbRXt_JC1RuRG35U_zizzTi3HwqkA5rvhJ_W0VPuRLCSraAVokMt7dNXIf551oJ-XNy1biWA/s1600/image1.gif" imageanchor="1" ><img style="100%" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-uWcB7FULeHyYVbosbQYPomkmCS1D1r4GJVTxaFMMa3zsQIEi3YS03p6gXAoELZkraqKgTFwCnIosIC8OTqD0WUdWRHt69lngvhEAA0GhRHdWX37zeK_rbRXt_JC1RuRG35U_zizzTi3HwqkA5rvhJ_W0VPuRLCSraAVokMt7dNXIf551oJ-XNy1biWA/s1600/image1.gif" data-original-width="100%" data-original-height="800" /></a> <div><br/></div> <p>As one of the world’s most popular cloud-based storage services, <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.docs" target="_blank">Google Drive</a> lets people do more than just store their files online. With Drive, users can synchronize, share, search, edit, and even pin specified files and content for safe and secure offline use.</p> <p>Recently, Drive’s developers revamped the application’s home screen to provide a more seamless experience across devices, matching updates made to Google Drive’s web version. However, the app’s previous architecture and codebase would’ve prevented the team from completing the updates in a timely manner.</p> <p>Instead of struggling with the app’s previous tech stack to implement the update, the Drive team rebuilt the home page from the ground up using <a href="https://developer.android.com/topic/architecture" target="_blank">Android’s recommended architecture</a> and <a href="https://developer.android.com/jetpack/compose" target="_blank">Jetpack Compose</a>, Android’s modern declarative toolkit for creating native UI.</p> <image><div style="text-align: center;"><img id="imgFull" alt="Compose, combined with architecture improvements, cut our development time nearly in half.” ? Dale Hawkins, Senior software engineer and tech lead at Google Drive" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS4qFn0SqV1ivDmkeSrJ0DnJ7ZiC7-BRbbRpt8dG_7hMlnePyrGHqrDpGfyDcuc2kUFFBW3bXoIkMDJORpCZRSmChzJvyXFsSTqAgQBRbmS3vmv8swahygqFHbOxe6B0bHVp2vt_4wv-On0DWH5_lx8g2XNfsW35uBZJAdcuitrK4mPEIklljC3xFPVhg/s1600/image3.png" width="100%"/></div></image> <h3>Experimenting with Kotlin and Compose</h3> <p>The Drive team experimented with Kotlin ? which the Compose toolkit is built with ? for several months before planning the app’s home screen rebuild. Drive’s developers liked Kotlin’s improved syntax and null enforcement, making it easier to produce code.</p> <p>“We had been using RxJava, but started looking into replacing that with coroutines,” said Dale Hawkins, the features team lead for Google Drive. “This led to a more natural alignment between coroutines and Jetpack Compose. After a deep dive into Compose, we came away with a clear understanding of how Compose has numerous benefits over the Views-based approach.”</p> <p>Following the Kotlin exploration, Dale experimented with Jetpack Compose. “I was pleased with how easy it was to build the UI using Compose. So I continued the experiment after that week,” said Dale. “I eventually rewrote the feature using Compose.”</p> <h3>Using Compose</h3> <p>Shortly after experimenting with Jetpack Compose, the Drive team decided to use it to completely rebuild the app’s home screen UI.</p> <p>“We wanted to make some major changes to match the ones being done for the web version, but that project had a several-month head start. We wanted to release the Android version shortly after the web changes went live to ensure our users have a seamless Google Drive experience across devices,” said Dale.</p> <p>The Drive team's experimentation and testing with Jetpack Compose showed that the new toolkit was powerful and reliable and that it would enable them to move faster. With this in mind, the Drive team decided to step away from their old codebase and embrace Jetpack Compose for the app’s home screen update. Not only would it be quicker and easier, but it would also better prepare the team to easily make future UI changes.</p> <h3>Using Android’s guidance for architecture </h3> <p>Before going all-in with Jetpack Compose, Drive developers wanted to restructure the application by implementing a completely new app architecture. Drive developers followed Android’s <a href="https://developer.android.com/topic/architecture" target="_blank">official architecture guidance</a> to apply structural changes, paving the way for the new Kotlin codebase.</p> <p>“The recommended architecture reinforces good separation between layers,” said Quintin Knudsen, an Android engineer for Google Drive. “We work in a highly dynamic environment and need to be able to adjust to any app changes. Using well-defined and independent layers helps isolate any changes or UI requirements. The recommendations from Android offered sound ways to structure the layers.” With a clear separation between the app’s data and UI layers, developers could work in parallel to significantly speed up testing and development.</p> <p>Drive developers also relied on Mappers and UseCases when creating the new architecture. These patterns allowed them to create flexible code that is easier to manage. They also exposed flows from their <span style=font-family:Courier><a href="https://developer.android.com/topic/libraries/architecture/viewmodel" target="_blank">ViewModels</a></span> to make the UI respond immediately to any data changes, making it much simpler to implement and understand UI updates.</p> <h3>Less code, faster development</h3> <p>With the app’s newly improved architecture and Jetpack Compose, <b>the Drive team was able to develop the app’s new home screen in less than half the time that they expected</b>. They also implemented the new code and finished quality assurance testing nearly seven weeks ahead of schedule.</p> <p>“Thanks to Compose, we had the groundwork done within a couple of weeks. We delivered a great implementation over a month ahead of schedule, and it’s been praised by product, UX, and even other engineering teams,” said Dale.</p> <p>Despite having fewer features, the original home screen required over 12,000 lines of code. <b>The new Compose-based home screen has many new features and only required 5,100 lines of code?a 57% reduction.</b> Having less code makes it much easier for developers to maintain the app and implement any updates.</p> <p>Testing the new UI in Jetpack Compose also required significantly less code. Before Compose, Drive developers used roughly 9,000 lines of code to test about 62% of the UI. With Compose, <b>it took only 2,200 lines to test over 80% of the new UI</b>.</p> <image><div style="text-align: center;"><img id="imgFull" alt="The original home screen required over 12,000 lines of code. The Compose-based home screen only required 5,100 lines of code. That’s a 57% reduction.” ? Dale Hawkins, Senior software engineer and tech lead at Google Drive" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGeBVd0e9EdcuRlhWOCykigdqNb8ZYaM2TCm1WXzxalR3iIurNkm-qUrizGbzz-eCPepTrK_R7vuPcR2LgEuSKwBzeKQTOQh8XIZ1cz40Dn7JaEpQww9aAG1bxws-5h-tTvY7xTWNqv-Xq-Xnz2RprGOvk7D0GG58yUIsYw6PnMRjJoUKOZxFRdeHMTrc/s1600/image2.png" width="100%"/></div></image> <h3>Looking forward</h3> <p>A new and improved app architecture paired with Jetpack Compose allowed Drive developers to rebuild the app’s home screen UI faster and easier than they could’ve imagined. The Drive team plans to expand its use of Compose within the application for things like supporting large dynamic displays and text resizing.</p> <p>“As we work on new projects, we’re taking the opportunity to update older UI code to make use of our new architecture and Compose. The new code will be objectively better and features will be easier to write, test, and maintain,” said Dale.</p> <iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="Q_pM2SsV5n0" width="100%" height="415" src="https://www.youtube.com/embed/Q_pM2SsV5n0"></iframe> <h3>Get started</h3> <p>Improve app architecture using Android’s <a href="https://developer.android.com/topic/architecture" target="_blank">official architecture guidance</a> and optimize your UI development with <a href="https://developer.android.com/jetpack/compose" target="_blank">Jetpack Compose</a>.</p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-5121921427764897481 2024-04-08T10:00:00.000-07:00 2024-04-08T10:00:48.582-07:00 Android Studio uses Gemini Pro to make Android development faster and easier <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN0q33r2-Na0bQSva4BtrsJqL_7-iHwY0Q3aBrnWBQad_ZFnK0m6WLnydyKAoqyvEEdkRNHfsHX_5sDg_idBjQ_bfzpwApKuk7AC10GEXNRTXnCWJQheLOH3JLRzc1E_HGtgVgV7kcDsE4YchfNukzcXEmBXOQ1kmEs2sirBsSQxmmuOK107MXvwSUsXo/s1600/image5.gif" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN0q33r2-Na0bQSva4BtrsJqL_7-iHwY0Q3aBrnWBQad_ZFnK0m6WLnydyKAoqyvEEdkRNHfsHX_5sDg_idBjQ_bfzpwApKuk7AC10GEXNRTXnCWJQheLOH3JLRzc1E_HGtgVgV7kcDsE4YchfNukzcXEmBXOQ1kmEs2sirBsSQxmmuOK107MXvwSUsXo/s1600/image5.gif" style="display: none;" /> <em>Posted by Sandhya Mohan ? Product Manager, Android Studio</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN0q33r2-Na0bQSva4BtrsJqL_7-iHwY0Q3aBrnWBQad_ZFnK0m6WLnydyKAoqyvEEdkRNHfsHX_5sDg_idBjQ_bfzpwApKuk7AC10GEXNRTXnCWJQheLOH3JLRzc1E_HGtgVgV7kcDsE4YchfNukzcXEmBXOQ1kmEs2sirBsSQxmmuOK107MXvwSUsXo/s1600/image5.gif"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN0q33r2-Na0bQSva4BtrsJqL_7-iHwY0Q3aBrnWBQad_ZFnK0m6WLnydyKAoqyvEEdkRNHfsHX_5sDg_idBjQ_bfzpwApKuk7AC10GEXNRTXnCWJQheLOH3JLRzc1E_HGtgVgV7kcDsE4YchfNukzcXEmBXOQ1kmEs2sirBsSQxmmuOK107MXvwSUsXo/s1600/image5.gif" /></a> <p>As part of the next chapter of our Gemini era, we announced <a href="https://blog.google/technology/ai/google-gemini-update-sundar-pichai-2024/" target="_blank">we were bringing Gemini to more products</a>. Today we’re excited to announce that Android Studio is using the Gemini 1.0 Pro model to make Android development faster and easier, and we’ve seen significant improvements in response quality over the last several months through our internal testing. In addition, we are making this transition more apparent by announcing that Studio Bot is now called <i>Gemini in Android Studio</i>.</p> <p>Gemini in Android Studio is an AI-powered coding assistant which can be accessed directly in the IDE. It can accelerate your ability to develop high-quality Android apps faster by helping generate code for your app, providing complex code completions, answering your questions, finding relevant resources, adding code comments and more ? all without ever having to leave Android Studio. It is available in <a href="http://d.android.com/studio/preview/gemini/availability" target="_blank">180+ countries and territories</a> in <a href="https://developer.android.com/studio" target="_blank">Android Studio Jellyfish</a>.</p> <p>If you were already using Studio Bot in the canary channel, you’ll continue experiencing the same helpful and powerful features, but you’ll notice improved quality in responses compared to earlier versions.</p> <h3>Ask Gemini your Android development questions</h3> <p>Gemini in Android Studio can understand natural language, so you can ask development questions in your own words. You can enter your questions in the chat window ranging from very simple and open-ended ones to specific problems that you need help with.</p> <p>Here are some examples of the types of queries it can answer:</p> <blockquote> <ul style="text-align: left;"><ul><li>How do I add camera support to my app?</li></ul></ul> <ul style="text-align: left;"><ul><li>Using Compose, I need a login screen with the following: a username field, a password field, a 'Sign In' button, a 'Forgot Password?' link. I want the password field to obscure the input.</li></ul></ul> <ul style="text-align: left;"><ul><li>What's the best way to get location on Android?</li></ul></ul> <ul style="text-align: left;"><ul><li>I have an 'orders' table with columns like 'order_id', 'customer_id', 'product_id', 'price', and 'order_date'. Can you help me write a query that calculates the average order value per customer over the last month?</li></ul></ul> </blockquote> <image><div style="text-align: center;"><img alt="Moving image demonstrating a conversation in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjas_FhKHTqxu3dKMT9m-Ub1IS4Qd1EemhoLGWEqWfetRUppLQ88zCpnSPjBq_8GwI2wRlEV-MoCFdZP7t9Ms4e7vizrWf346tvEZHQXeGaYExRRHCW0focMDRecKtd9kPUdVm1wv1B1K7aVat1WXerNenUBlD-9lzLu9AeO0iFzvlMPPxvHepIlQDzJfE/s1600/1-GIF_04042024.gif" width="100%" /></div></image><br /> <p>Gemini in Android Studio remembers the context of the conversation, so you can also ask follow-up questions, such as “Can you give me the code for this in Kotlin?” or “Can you show me how to do it in Compose?”</p> <h3>Code faster with AI powered Code Completions</h3> <p>Gemini in Android Studio can help you be more productive by providing you with powerful <a href="http://d.android.com/studio/preview/gemini/ai-code-completion" target="_blank">AI code completions</a>. You can receive suggestions of multi-line code completions, suggestions for how to do comments for your code, or how to add documentation to your code.</p> <image><div style="text-align: center;"><img alt="Moving image demonstrating code completion in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiisvK5mtxRYsCvtWDYHiNlKA6ScxSpIvgdgeyjw6tfUvZGR1WINjBQGuPpLiSaPOwkF0-9nMbr1MSURjWE3FNYzSxEk9Mz7UI1HFbhz2i9zCBiSGvcsPrS64y_i400cnx0fYpOEBe2p1GyZd8OzQkX9I4Ycm0gGVBb1gayyPSix9g5r12DqkZv9nymhg8/s1600/image3.gif" width="100%" /></div></image><br /> <h3>Designed with privacy in mind</h3> <p>Gemini in Android Studio was designed with privacy in mind. Gemini is only available after you log in and enable it. You don’t need to send your code context to take advantage of most features. By default, Gemini in Android Studio’s chat responses are purely based on conversation history, and you control whether you want to share additional context for customized responses. You can update this anytime in Android Studio &gt; Settings at a granular project level. We also have a custom way for you to opt out certain files and folders through an <span style="color: #0d904f; font-family: Courier;">.aiexclude</span> file. Much like our work on other AI projects, we stick to a set of AI Principles that hold us accountable. Learn more <a href="http://d.android.com/studio/preview/gemini/data-and-privacy" target="_blank">here</a>.</p> <image><div style="text-align: center;"><img alt="image of share settings in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicYGyWIyJUcl5bnt9uFxMr7rej55PkB0M3zk3ihtRySejr60s9PxCC_CZjKfIepetNUBaPF4oNBCBUzFalgCn5DoEstjVyKBwunVMfiY__VvJT-VQKg08TyXP94B-_iAxdV44KGFvg5Dmj_boj-dbIW6-MVkwBuPFL37uWTGQ-54XL71Zol7h-dABWdSw/s1600/image1.png" width="100%" /></div></image><br /> <h3>Build a Generative AI app using the Gemini API starter template</h3> <p>Not only does Android Studio use Gemini to help you be more productive, it can also help you take advantage of Gemini models to create AI-powered features in your applications. Get started in minutes using the Gemini API starter template available in the <a href="https://developer.android.com/studio/preview" target="_blank">canary</a> release ? channel for Android Studio ? under <b>File &gt; New Project &gt; Gemini API Starter</b>. You can also use the code sample available at <b>File &gt; Import Sample &gt; Google Generative AI sample</b>.</p> <p>The Gemini API is multimodal, meaning it can support image and text inputs. For example, it can support conversational chat, summarization, translation, caption generation etc. using both text and image inputs.</p> <image><div style="text-align: center;"><img alt="image of starter templates in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW2Ey-wzHms_nQerYAweFOQprNaSxq2d5VGgtZCiVrogFgVzh8hD-jkgn2qgvRXCm1HOE7EgqMyRwCzeQSFqxEBzhH3B0ZvRZL1EbI_jU2cElLbZupV2m_5hEChEw5oaD5nAr9ffrt9TgOqZMEVJFMHsPCELQzc9eG-djHLG9yeBzzRAmyaVXNXGe81CM/s1600/image2.png" width="100%" /></div></image><br /> <h3>Try Gemini in Android Studio</h3> <p>Gemini in Android Studio is still in preview, but we have added many feature improvements ? and now a major model update ? since we released the experience in May 2023. It is currently no-cost for developers to try out. Now is a great time to test it and let us know what you think, before we release this experience to stable. </p><br /> <p><em>Stay updated on the latest by following us on <a href="https://www.linkedin.com/showcase/androiddev/posts/?feedView=all" target="_blank">LinkedIn</a>, <a href="https://medium.com/androiddevelopers" target="_blank">Medium</a>, <a href="https://www.youtube.com/c/AndroidDevelopers/videos" target="_blank">YouTube</a>, or <a href="https://twitter.com/androidstudio" target="_blank">X</a>. Let's build the future of Android apps together!</em></p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-4861721948634671501 2024-03-29T09:00:00.000-07:00 2024-03-29T09:00:00.126-07:00 Battling Impersonation Scams: Monzo’s Innovative Approach <meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9RdxcjxL3U0FED0xkLkqoaR-kRYYPKhVSJJjBdyeaRoMO0PbguHKu3xP0NqItQujnU5lWdTlXlUu4aMK-SYZZ4DtZNc2tvpr-Qr67rUseUat43Q3ZTEA711xg-cknJUK2HHNiqVcAVit4jTxKrFFqe7cmzsI6A-sAbj1mbLY-dvK0WdL1Lb1vD4nrivI/s1600/new-social.png"> <img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9RdxcjxL3U0FED0xkLkqoaR-kRYYPKhVSJJjBdyeaRoMO0PbguHKu3xP0NqItQujnU5lWdTlXlUu4aMK-SYZZ4DtZNc2tvpr-Qr67rUseUat43Q3ZTEA711xg-cknJUK2HHNiqVcAVit4jTxKrFFqe7cmzsI6A-sAbj1mbLY-dvK0WdL1Lb1vD4nrivI/s1600/new-social.png"> <em>Posted by Todd Burner ? Developer Relations Engineer</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1fi1qTWTJC_RmEL7ytOhAklf204fm9nF8128Qo56AvzCKsD1TrJUSh47x_Jr-OyDe5ihxWVWFVpa1z0m_8b9XbNOl_h-xPC6ZluNWxmbJ93NVViKDTtWAjZHPEdwjWg62mBD5srdDRbzcBXMPjHFt4aP8opdt0TJ0K-dr-shkGmcdko0IqfTDWLvfuxY/s1600/Monzo-Blog-Banner.png" imageanchor="1" ><img style="100%" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1fi1qTWTJC_RmEL7ytOhAklf204fm9nF8128Qo56AvzCKsD1TrJUSh47x_Jr-OyDe5ihxWVWFVpa1z0m_8b9XbNOl_h-xPC6ZluNWxmbJ93NVViKDTtWAjZHPEdwjWg62mBD5srdDRbzcBXMPjHFt4aP8opdt0TJ0K-dr-shkGmcdko0IqfTDWLvfuxY/s1600/Monzo-Blog-Banner.png" data-original-width="100%" data-original-height="800" /></a> <p>Cybercriminals continue to invest in advanced financial fraud scams, costing consumers more than $1 trillion in losses. According to the 2023 <a href="https://www.newswire.com/news/global-losses-to-scammers-exceed-1-trillion-as-1-in-4-lose-money-to-22145725" target="_blank">Global State of Scams Report by the Global Anti-Scam Alliance</a>, 78 percent of mobile users surveyed experienced at least one scam in the last year. Of those surveyed, 45 percent said they’re experiencing more scams in the last 12 months.</p> <image><div style="text-align: center;"><img id="imgFull" alt="ALT TEXT" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8o87R6eoIO7ByjEL9QSZ85PAFYn1k-Q9rHwFF4K_uJ8g8T_AzJ9SIrm3x0Ltix_m2BWEBPHkJ7KmV5B7jp78cUb0_hbgKTBCW8m1w0NbtlFnx9RmJDCAbm-piJNoTrq8Dc16qpmkb6LCRSIuPJcEmFRJzQ5CVbcP3Txz75zTMIBcfsNYEnEvIeF2YmRo/s1600/image4.png" width="100%"/></div></image><br/> <p>The Global Scam Report also found that phone calls are the top method to initiate a scam. Scammers frequently employ social engineering tactics to deceive mobile users.</p> <p>The key place these scammers want individuals to take action are in the tools that give access to their money. This means financial services are frequently targeted. As cybercriminals push forward with more scams, and their reach extends globally, it’s important to innovate in the response.</p> <p>One such innovator is Monzo, who have been able to tackle scam calls through a unique impersonation detection feature in their app.</p> <h3>Monzo’s Innovative Approach</h3> <p>Founded in 2015, Monzo is the largest digital bank in the UK with presence in the US as well. Their mission is to make money work for everyone with an ambition to become the one app customers turn to to manage their entire financial lives.</p> <image><div style="text-align: center;"><img id="imgFull" alt="Monzo logo" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisTk0iOUitj4Dz0yVGcyAlEub9LD5t1bAkDnRHbDXZRA0RayjMQuG8UFfhhqFx8C-tdyhIGBt2TS4gsEv_5TRHG-SBkdfwFvZAJTeeMd4DeOFNzOnSj95uUBcYZ9T9XJJlFEz_Lq42W_Cf326id3J5OI-CA-fYxeNnaPPb_oWkMY_f5kt-S2UNF2F6ThA/s1600/image1.png" width="100%"/></div></image><br/> <p><a href="https://www.ukfinance.org.uk/news-and-insight/press-release/new-figures-show-ps1776m-was-lost-impersonation-scams-in-2022-take" target="_blank">Impersonation fraud</a> is an issue that the entire industry is grappling with and Monzo decided to take action and introduce an industry-first tool. An impersonation scam is a very common social engineering tactic when a criminal pretends to be someone else so they can encourage you to send them money. These scams often involve using urgent pretenses that involve a risk to a user’s finances or an opportunity for quick wealth. With this pressure, fraudsters convince users to disable security safeguards and ignore proactive warnings for potential malware, scams, and phishing.</p> <h3>Call Status Feature</h3> <p>Android offers multiple layers of spam and phishing protection for users including call ID and spam protection in the Phone by Google app. Monzo’s team wanted to enhance that protection by leveraging their in-house telephone systems. By integrating with their mobile application infrastructure they could help their customers confirm in real time when they’re actually talking to a member of Monzo’s customer support team in a privacy preserving way.</p> <p>If someone calls a Monzo customer stating they are from the bank, their users can go into the app to verify this. In the Monzo app’s Privacy & Security section, users can see the ‘Monzo Call Status’, letting them know if there is an active call ongoing with an actual Monzo team member.</p> <blockquote><span style="font-size: large;"><i>“We’ve built this industry-first feature using our world-class tech to provide an additional layer of comfort and security. Our hope is that this could stop instances of impersonation scams for Monzo customers from happening in the first place and impacting customers.”&nbsp;</i></span><p></p><p><b>- Priyesh Patel, Senior Staff Engineer, Monzo’s Security team</b></p></blockquote> <h3>Keeping Customers Informed</h3> <p>If a user is not talking to a member of Monzo’s customer support team they will see that as well as some helpful information. If the ‘Monzo call status’ is showing that you are not speaking to Monzo, the call status feature tells you to hang up right away and report it to their team. Their customers can start a scam report directly from the call status feature in the app.</p> <image><div style="text-align: center;"><img id="imgFull" alt="screen grab of Monzo call status alerting the customer that the call the customer is receiving is not coming from Monzo. The customer is being advised to end the call" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguZ0FD_nFvmFYqzppPhAKQQsXPpQDJBulWGoJAByC2fTitYF-hzxeZMZVwsnc9esbx598xMs_A46i4ckxnuJQu1PrgQASceph0G6Vt8nCb4AS_YfaVl8tdzBUDFLAiajfLjxWv9m9-JDCJisUFVfD3toIqWTxC237vsVUn6Kd8yNfMmXpW4O06PHgbCkw/s1600/image2.png" width="100%"/></div></image><br/> <p>If a genuine call is ongoing the customer will see the information.</p> <image><div style="text-align: center;"><img id="imgFull" alt="screen grab of Monzo call status confirming to the customer that the call the customer is receiving is coming from Monzo." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimvppUPkI9ZDKYFinQq37kughoC-5ZuWyGDZWeM_HjyAH0Wr-LQinwdKKKFLuGOwStMR0uYQrAP4V-UXUbqB784bZ9HL3TI0iq-TP_VHoFk3hnoloVK-0chyphenhyphenkOX8LVtB_y_PaIHU-koaIgEOoWOvmidr2_zdzO6ytkP3xk4dxMGx6HjuI98Qp1LxiuDR4/s1600/image6.png" width="100%"/></div></image><br/> <h3>How does it work?</h3> <p>Monzo has integrated a few systems together to help inform their customers. A cross functional team was put together to build a solution.</p> <p>Monzo’s in-house technology stack meant that the systems that power their app and customer service phone calls can easily communicate with one another. This allowed them to link the two and share details of customer service calls with their app, accurately and in real-time.</p> <p>The team then worked to identify edge cases, like when the user is offline. In this situation Monzo recommends that customers don’t speak to anyone claiming they’re from Monzo until you’re connected to the internet again and can check the call status within the app. </p> <image><div style="text-align: center;"><img id="imgFull" alt="screen grab of Monzo call status displaying warning while the customer is offline letting the customer know the app is unable to verify whether or not the call is coming from Monzo, so it is safer not to answer." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitZzpe5y3du_onQYb4IcS-85yEG_7v1WOTXom6C0xIMCvxxNaXi0EUw0ZrhZAv-LWVZTt7o9daFvl8wDOeHYWR0VwYVWFFAWLYfzmNSSqHgcgT7gsCENdT1s6KW4QNN7alLVhEzVO7MgsTKIH_XGc3XTUkzcr3_SLnqF4urVreq3D9rfmFGjiM83fnaAk/s1600/image5.png" width="100%"/></div></image><br/> <h3>Results and Next Steps</h3> <p>The feature has proven highly effective in safeguarding customers, and received universal praise from industry experts and consumer champions.</p> <blockquote><span style="font-size: large;"><i>“Since we launched Call Status, we receive an average of around 700 reports of suspected fraud from our customers through the feature per month. Now that it’s live and helping protect customers, we’re always looking for ways to improve Call Status - like making it more visible and easier to find if you’re on a call and you want to quickly check that who you’re speaking to is who they say they are.”&nbsp;</i></span><p></p><p><b>- Priyesh Patel, Senior Staff Engineer, Monzo’s Security team</b></p></blockquote> <h3>Final Advice</h3> <p>Monzo continues to invest and innovate in fraud prevention. The call status feature brings together both technological innovation and customer education to achieve its success, and gives their customers a way to catch scammers in action. </p> <p>A layered security approach is a great way to protect users. Android and Google Play provide layers like app sandboxing, Google Play Protect, and privacy preserving permissions, and Monzo has built an additional one in a privacy-preserving way.</p> <p>To learn more about Android and Play’s protections and to further protect your app check out these resources:</p> <ul><ul> <li><a href="https://developer.android.com/quality/privacy-and-security" target="_blank">Improve your app’s security</a></li> <li><a href="https://developer.android.com/google/play/integrity/overview" target="_blank">Adopt Play Integrity API</a></li> </ul></ul> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-2886652473920530970 2024-03-25T09:00:00.000-07:00 2024-03-25T10:11:20.385-07:00 #WeArePlay | Meet the founders changing women's lives: Women’s History Month Stories <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu218W2RyLDMAvOEcTDjLxA2tjNEFk6822pJCEX1uklhlS4xpUn4A5pQbmDLsnUgOC_Vfzy1stegKYeBgy0jdWOCimNm_I9eTkUg1l5lJRk0ASIaaZxda23M1MU6HvxT5yLhxzdzNMCRU3j457Tn6g7RLBLWs7sAvwCa3u0ytAAt_WUpmpGRM-HCmzGjA/s1600/%23WeArePlay%20Social%20.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu218W2RyLDMAvOEcTDjLxA2tjNEFk6822pJCEX1uklhlS4xpUn4A5pQbmDLsnUgOC_Vfzy1stegKYeBgy0jdWOCimNm_I9eTkUg1l5lJRk0ASIaaZxda23M1MU6HvxT5yLhxzdzNMCRU3j457Tn6g7RLBLWs7sAvwCa3u0ytAAt_WUpmpGRM-HCmzGjA/s1600/%23WeArePlay%20Social%20.png" style="display: none;" /> <em>Posted by Leticia Lago ? Developer Marketing</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfkoyiV0Ohxbe89HXqSsLkj4WD8ADd5AmwhHRv4MyMdbrm11cE1wn-SnjSYjsmWupfwZDt6FhaV_-kWQJ1AdObLCTglDqkO1V_Uo6z7S14NpYbQyWzxaDNOMK3fEa2_k25zNk-kQIkDI21X8YjGyoKu-Nnuptx1YYyd6nXmIxC4bPJQl0iHBj2dMD2nI4/s1600/%23WeArePlay%20Banner.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfkoyiV0Ohxbe89HXqSsLkj4WD8ADd5AmwhHRv4MyMdbrm11cE1wn-SnjSYjsmWupfwZDt6FhaV_-kWQJ1AdObLCTglDqkO1V_Uo6z7S14NpYbQyWzxaDNOMK3fEa2_k25zNk-kQIkDI21X8YjGyoKu-Nnuptx1YYyd6nXmIxC4bPJQl0iHBj2dMD2nI4/s1600/%23WeArePlay%20Banner.png" /></a> <p>In celebration of Women’s History month, we’re celebrating the founders behind groundbreaking apps and games from around the world - made by women or for women. Let's discover four of my favorites in this latest batch of nine <a href="https://play.google.com/console/about/weareplay/" target="_blank"> #WeArePlay stories</a>.</p><br /> <h3>Mukami Kinoti Kimotho</h3> <p><b><span style="font-size: large;">Royelles Revolution / Royelles Revolution: Gaming For Girls (USA)</span></b></p> <image><div style="text-align: center;"><a href="https://play.google.com/console/about/weareplay/" target="_blank"><img alt="Mukami Kinoti Kimotho ? Royelles Revolution / Royelles- Gaming For Girls | USA" border="0" height="640" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6tkNfmiNsZsaazg8OG_nEt1TzHHIAnkk3Ei10Q3vVRBI3dGWVxbo6JaEFPa9i0-GWqMTN30cR_f4256XplS9Rg1bxiN0EZlnJDoObwozARkeXzVXUBu_KTzG7SIWar4AmE-f-tW53iWwmxadNECFw2vKS5YUH7c6GqAPrEg-QFcwWEXSytVbQV5-lgSM/w493-h640/USA_Social_DevPromo_Royelles%20Revolution.png" width="493" /></a></div></image> <div style="text-align: left;"><br /></div><p>Mukami's journey began when she noticed the lack of representation for girls in the gaming industry. Determined to change this narrative, she created Royelles, a game designed to inspire girls and non-binary people to pursue careers in STEAM (science, technology, engineering, art, math) fields. The game is anchored in fierce female avatars like the real life NASA scientist Mara who voices a character. Royelles is revolutionizing the gaming landscape and empowering the next generation of innovators. Mukami's excited to release more gamified stories and learning modules, and a range of extended reality and AI-powered avatars based on the game’s characters.</p> <blockquote><span style="font-size: large;"><i>"If we're going to effectively educate Gen Z and Gen Alpha, we have to meet them in the metaverse and leverage gamified play as a means of driving education, awareness, inspiration and empowerment.”&nbsp;</i></span><p></p><p><b>- Mukami</b></p></blockquote> <h3>Leonika Sari Njoto Boedioetomo</h3> <p><b><span style="font-size: large;">Reblood: Blood Services App (Indonesia)</span></b></p> <image><div style="text-align: center;"><a href="https://play.google.com/console/about/weareplay/" target="_blank"><img alt="Leonika Sari Njoto Boedioetomo ? Reblood / Blood Services App | Indonesia" border="0" height="640" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvpDipNC-zeuqm2yBxJArUkPR0O95HlJRys3c0fnZY6NubA8ATU4RMvJLv83so53CR8G-QTRm6hwo-PmdJQcJOcN-J1FPP9MoUUnTkecGIG-dGdW0GkcrSki5OdL6BHASi1CvDJY8J0Z2H14SY8lxZPU9RpPvnCAuu3CjCkdvPrAtUAexGvj0rxkcIx98/s1600/INDONESIA_Social_DevPromo_Reblood.png" width="493" /></a></div></image> <div style="text-align: left;"><br /></div><p>When her university friend needed an urgent blood transfusion but discovered there was none available in the blood bank, Leonika became aware of the blood donation shortage in Indonesia. Her mission to address this led her to create Reblood, an app connecting blood donors with those in need. With over 140,000 blood donations facilitated to date, Reblood is not only saving lives but also promoting healthier lifestyles with a recently added feature that allows people to find the most affordable medical checkups.</p> <blockquote><span style="font-size: large;"><i>“Our goal is to save more lives by raising awareness of blood donation in Indonesia and promoting healthier lifestyles for blood donors.”&nbsp;</i></span><p></p><p><b>- Leonika</b></p></blockquote> <h3>Luciane Antunes dos Santos and Renato Helio Rauber</h3> <p><b><span style="font-size: large;">CARSUL / Car Sul: Urban Mobility App (Brazil)</span></b></p> <image><div style="text-align: center;"><a href="https://play.google.com/console/about/weareplay/" target="_blank"><img alt="Luciane Antunes dos Santos and Renato Helio Rauber ? Car Sul: Urban Mobility App | Brazil" border="0" height="640" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnSt2Xg4U9FyFqT9Rt3kR5NjA5yDl_1jazXEdimKT_hbpVTyL4daJTqgKals76c8vGE7-IxaHbPM8ikA60NY4WCvKUi8XFO_813cKx8g1W41o2d9QIUukQVk9_Ohk5jyrJYxSxIvfLyThm8CW_KlyNomkt9cWBGghqeGDiGk37rL4ocuA_A5n40S8Hd7U/s1600/BRAZIL_Social_DevPromo_Carsul.png" width="493" /></a></div></image> <div style="text-align: left;"><br /></div><p>Luciane was devastated when she lost her son in a car accident. Her and her husband Renato's loss led them to develop Carsul, an urban mobility app prioritizing safety and security. By providing safe transportation options and partnering with government health programs to chauffeur patients long distances to larger hospitals, Carsul is not only preventing accidents but also saving lives. Luciane and Renato's dedication to protecting others from the pain they've experienced is ongoing and they plan to expand to more cities in Brazil.</p> <blockquote><span style="font-size: large;"><i>“Carsul was born from this story of loss, inspiring me to protect other lives. Redefining myself in this way is very rewarding.”&nbsp;</i></span><p></p><p><b>- Luciane</b></p></blockquote> <h3>Diariata (Diata) N'Diaye</h3> <p><b><span style="font-size: large;">Resonantes / App-Elles: Safety App for Women (France)</span></b></p> <image><div style="text-align: center;"><a href="https://play.google.com/console/about/weareplay/" target="_blank"><img alt="Diariata (Diata) N'Diaye ? Resonantes /App-Elles: Safety App for Women | France" border="0" height="640" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi03vRYfkRIMtV2BRZZiZbgpxn6DVS-d-TK0Mulenb-IKQ871Vh55WjNdI5tWbRrO3KFRP2OF2Y1JUMXD0gN9x7Ic8THxom2hhwcggSxsPhjTt-deCWtkoJnsRxC-zeqQIPDf8oXD_MXy5UgTkR3Tjz5GubWK8vhCUXcgDn5a1_ahj6wc4J6dOxah99ET8/s1600/FRANCE_Social_DevPromo_Resonantes.png" width="493" /></a></div></image><span style="font-size: large;"> </span><div style="text-align: left;"><br /></div><p>After hearing the stories of young people who had experienced abuse that was similar to her own, Spoken word artist Diata developed App-Elles ? an app that allows women to send alerts when they're in danger. By connecting users with support networks and professional services, App-Elles is empowering women to reclaim their safety and seek help when needed.Diata also runs writing and recording workshops to help victims overcome their experiences with violence and has plans to expand her app with the introduction of a discreet wearable that sends out alerts.</p> <blockquote><span style="font-size: large;"><i>“I realized from my work on the ground that there were victims of violence who needed help and support systems. This was my inspiration to create App-Elles."&nbsp;</i></span><p></p><p><b>- Diata</b></p></blockquote><br/> <p>Discover more <a href="https://play.google.com/console/about/weareplay/" target="_blank">#WeArePlay stories</a> and share your favorites.</p> <br /><br /> <p></p><center> How useful did you find this blog post? </center><p></p> <p></p><center> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> </center><p></p> <div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s260/lockup_ic_Google_Play_H_260x53px_clr.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="53" data-original-width="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s200/lockup_ic_Google_Play_H_260x53px_clr.png" width="200" /></a></div> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-2081188697284031624 2024-03-21T11:00:00.000-07:00 2024-04-11T09:04:06.471-07:00 The Second Developer Preview of Android 15 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW1UxJk2BEGQu-9eSLY0fV6wrCb0FJTo_-rMykFO0wUDajMwXeF7CgXx9MBKZcOLhd5bOikhbK9PWvM3aYfncnDn_Lba0ASuchSeKbpt4ZWcmcEHDK8_W6-_C2DnWs3T7v1DPk2EtTAH_amWewikG5f9NDadQSJ6DbcwiTKEG0XtlO_f250KaNRz76Jcg/s1600/AD-15-Developer-Preview.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW1UxJk2BEGQu-9eSLY0fV6wrCb0FJTo_-rMykFO0wUDajMwXeF7CgXx9MBKZcOLhd5bOikhbK9PWvM3aYfncnDn_Lba0ASuchSeKbpt4ZWcmcEHDK8_W6-_C2DnWs3T7v1DPk2EtTAH_amWewikG5f9NDadQSJ6DbcwiTKEG0XtlO_f250KaNRz76Jcg/s1600/AD-15-Developer-Preview.png" style="display: none;" /> <em> Posted by <a href="https://twitter.com/davey_burke" target="_blank">Dave Burke</a>, VP of Engineering </em> <div class="separator" style="border: 0px; clear: both; float: right; padding: 0px; width: 45%;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" style="display: block; padding: 1em 0px; text-align: center;"><br /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Android 14 logo" border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" width="320" /></a></div> <p><br /></p><p>Today marks the second chapter of the Android 15 story with the release of Android 15 Developer Preview 2!</p> <p>Android 15 continues our work to build a platform that helps improve your productivity while giving you new capabilities to produce <a href="http://d.android.com/media" target="_blank">superior media</a> and <a href="https://developer.android.com/ml/aicore" target="_blank">AI experiences</a>, take advantage of device form factors, <a href="https://developer.android.com/develop/background-work/background-tasks" target="_blank">minimize battery impact</a>, <a href="https://developer.android.com/topic/performance/baselineprofiles/overview" target="_blank">maximize smooth app performance</a>, and <a href="https://developer.android.com/privacy-and-security/about" target="_blank">protect user privacy and security</a>, all on the most diverse lineup of devices out there.</p> <p>Android continues to add features enabling your apps to take advantage of premium device hardware, including the latest telecommunications features, high-end media capabilities, dazzling displays, foldable/filppable form factors, and AI processing.</p> <p>Your feedback on the Android 15 Developer Preview and Beta program plays a key role in helping Android continuously improve. The <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a> has more information about the preview, including downloads for Pixel and detailed documentation about changes. This preview is just the beginning, and we’ll have lots more to share as we move through the release cycle. Thank you in advance for your help in making Android a platform that works for everyone.</p> <h3 style="text-align: left;"><span style="font-size: x-large;">Updating Android communications</span></h3> <p>Android 15 updates the platform to give your app access to the latest advances in communication.</p> <h4 style="text-align: left;"><span style="font-size: large;">Satellite support</span></h4> <p>Android 15 continues to extend platform support for satellite connectivity and includes some UI elements to ensure a consistent user experience across the satellite connectivity landscape.</p> <image><div style="text-align: center;"><img alt="screen schot of a mobile Android device showing notification when device connects to satellite" border="0" height="400" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhYamLzA7BrwXPi87If8wLEFGN_Nij6N4hpox0P1jRBvRQYXyuimQFhSCqw9Krbjp55WQK8tqVycR4Gr901oL5ocas-19FkIfmr7F-wH-Dqsr1kDrTpNrc9EOP2cWpiC9h-qkfVl_-b3iqIr7m_4V3Tju-REVpCh1jjSSfipvuTaRrxN39PGhF119EYZw/w398-h400/image9.png" width="398" /></div><imgcaption><center><em>Notification when device connects to satellite</em></center></imgcaption></image> <p>Apps can use <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/telephony/ServiceState?#isUsingNonTerrestrialNetwork%28%29" target="_blank">ServiceState.isUsingNonTerrestrialNetwork()</a></span> to detect when a device is connected to a satellite, giving them more awareness of why full network services may be unavailable. Additionally, Android 15 provides support for SMS/ MMS applications as well as preloaded RCS applications to use satellite connectivity for sending and receiving messages.</p> <h4 style="text-align: left;"><span style="font-size: large;">Smoother NFC experiences</span></h4> <p>Android 15 is working to make the tap to pay experience more seamless and reliable while continuing to support Android's robust NFC app ecosystem. On supported devices, apps can request the <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/nfc/NfcAdapter" target="_blank">NfcAdapter</a></span> enter <a href="https://developer.android.com/reference/android/nfc/NfcAdapter#setObserveModeEnabled%28boolean%29" target="_blank">observe mode</a>, where the device will listen but not respond to NFC readers, sending the app's NFC service <span style="color: #0d904f; font-family: Courier;">PollingFrame</span> objects to process. The <span style="color: #0d904f; font-family: Courier;"><a href="https://develpoer.android.com/reference/android/nfc/cardemulation/HostApduService#processPollingFrames%28java.util.List%3Candroid.nfc.cardemulation.PollingFrame%3E%29" target="_blank">PollingFrame</a></span> objects</p> can be used to auth ahead of the first communication to the NFC reader, allowing for a one tap transaction in many cases. <h3 style="text-align: left;"><span style="font-size: x-large;">Developer productivity</span></h3> <p>While most of our work to improve your productivity centers around tools like <a href="https://developer.android.com/studio" target="_blank">Android Studio</a>, <a href="https://developer.android.com/jetpack/compose" target="_blank">Jetpack Compose</a>, and the <a href="https://developer.android.com/jetpack" target="_blank">Android Jetpack</a> libraries, we always look for ways in the platform to help you more easily realize your vision.</p> <h4 style="text-align: left;"><span style="font-size: large;">PDF Improvements</span></h4> <image><div style="text-align: center;"><img alt="screen schot of a mobile Android device showing search enabled for PDF files" border="0" height="400" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh36mJzos5LY2bD15mJlcRj-VfIQZB07DKp5IywaEyMINjFjgh7a1czQRjd5-ivyLb2dVEo3mZEOkLNA2jk7HUDquzUQeC4yx-lkaQcpk09M5BLkq4aIdJguK7DL3N_aypEWpfUAqHqealv_TMqzEPZQW6GY8qO-X5CXrN-jjLgf09GsVVBS7j1KvbOGnM/s1600/image3.png" width="398" /></div><imgcaption><center><em>Enable searching embedded PDF files with updates to <span style="color: #0d904f; font-family: Courier;">PdfRenderer</span></em></center></imgcaption></image><br/> <p>Android 15 Developer Preview 2 includes an early preview of substantial improvements to the <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/graphics/pdf/PdfRenderer" target="_blank">PdfRenderer APIs</a></span>, giving apps capabilities to incorporate advanced features such as rendering <a href="https://developer.android.com/reference/android/graphics/pdf/LoadParams" target="_blank">password-protected files</a>, annotations, <a href="https://developer.android.com/reference/android/graphics/pdf/models/FormEditRecord" target="_blank">form editing</a>, <a href="https://develpoer.android.com/reference/android/graphics/pdf/PdfRenderer.Page#searchText%28java.lang.String%29" target="_blank">searching</a>, and <a href="https://developer.android.com/reference/android/graphics/pdf/PdfRenderer.Page#selectContent%28android.graphics.pdf.models.selection.SelectionBoundary,%20android.graphics.pdf.models.selection.SelectionBoundary,%20boolean%29" target="_blank">selection</a> with copy. Linearized PDF optimizations are supported to speed local PDF viewing and reduce resource use.</p> <p>The PdfRenderer has been moved to a module that can be updated using Google Play system updates independent of the platform release, and we're supporting these changes back to Android R by creating a compatible pre-Android 15 version of the API surface, called <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/graphics/pdf/PdfRendererPreV" target="_blank">PdfRendererPreV</a></span>.</p> <p>We value your feedback on the enhancements we've made to the PdfRenderer API surface, and we plan to make it much easier to incorporate these APIs into your app with an upcoming Android Jetpack library. Stay tuned.</p> <h4 style="text-align: left;"><span style="font-size: large;">Automatic language switching refinements</span></h4> <p>Android 14 added on-device multi-language audio recognition with automatic switching between languages, but this can cause words to get dropped, especially when languages switch with less of a pause between the two utterances. Android 15 has added additional controls to allow apps to help tune this switching for their use case. <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/speech/RecognizerIntent#EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS" target="_blank">EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS</a></span> confines the automatic switching to the beginning of the audio session, while <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/speech/RecognizerIntent#EXTRA_LANGUAGE_SWITCH_MAX_SWITCHES" target="_blank">EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES</a></span> deactivates the language switching after a defined number of switches. This can be a useful refinement, particularly if the expectation is that there will be a single language spoken during the session that should be autodetected.</p> <h4 style="text-align: left;"><span style="font-size: large;">Granular line break controls</span></h4> <p>Starting in Android 15, the <a href="https://developer.android.com/reference/android/widget/TextView" target="_blank">TextView</a> and the underlying line breaker can preserve the given portion of text in the same line to improve readability. You can take advantage of this line break customization by using the &lt;nobreak&gt; tag in string resources or <a href="https://developer.android.com/reference/android/text/style/LineBreakConfigSpan#createNoBreakSpan%28%29" target="_blank">createNoBreakSpan</a>. Similarly, you can preserve words from hyphenation by using the &lt;nohyphen&gt; tag or <a href="https://developer.android.com/reference/android/text/style/LineBreakConfigSpan#createNoHyphenationSpan%28%29" target="_blank">createNoHyphenationSpan</a>.</p> <p>Examples and screenshots:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">&lt;resources&gt; &lt;string name=<span style="color: #ba2121;">"pixel8pro"</span>&gt;The power and brains behind Pixel <span style="color: #666666;">8</span> Pro.&lt;/string&gt; &lt;/resources&gt;</span> </pre></div> <image><div style="text-align: center;"><img alt="text reads: The power and brains behind Pixel 8 Pro." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgar54Zl0G5tyzWAkSOoO40W7DF1VZ1npSpmEFQ2LzqX96AGqFApCocUnpx6BulUMjGN8tlObI5PgXieBOXki89MND6oJ5zNxDCjrsVUoMZheLNQrKP6xly2AgCRxQG7EZS6tbmab-5OZ0YpeCLw2NfFGnAEyCiRxn5fPqoec-M3AVIMQLpKjqTGPvPRcg/s16000/image5.png" /></div></image> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">&lt;resources&gt; &lt;string name=<span style="color: #ba2121;">"pixel8pro"</span>&gt;The power and brains behind &lt;nobreak&gt;Pixel <span style="color: #666666;">8</span> Pro.&lt;/nobreak&gt;&lt;/string&gt; &lt;/resources&gt;</span> </pre></div> <image><div style="text-align: center;"><img alt="text reads: The power and brains behind Pixel 8 Pro." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZdUj8c4odSyWPBtt9_wbS9i94WuLjKrNFeFcUQgnwrYYNoIYsj698QrucdZEmweynlGBMd8KjbjY_sfGKXU1gNznGtitKzaCVObhBqzkJJFP46vgDIrCMYu9nXdmW3WAC5kWl4_4GAftwc_QkRLl8kFBcd2Dy1AKt5U1FQ4X21bO0FwbebNDO3gvmMak/s16000/image4.png" /></div></image> <h4 style="text-align: left;"><span style="font-size: large;">Expanded IntentFilter Functionality</span></h4> <p>Android 15 builds-in support for more precise Intent resolution through <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/content/UriRelativeFilterGroup" target="_blank">UriRelativeFilterGroup</a></span>, which contain a set of <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/content/UriRelativeFilter" target="_blank">UriRelativeFilter</a></span> objects that form a set of Intent matching rules that must each be satisfied, including URL query parameters, URL fragments, and blocking/exclusion rules. This helps applications better keep up with the dynamic demands of web-hosted deep links.</p> <p>These rules can be defined in the <span style="color: #0d904f; font-family: courier;">AndroidManifest</span> with the new &lt;uri-relative-filter-group&gt; tag which can optionally include an <span style="color: #0d904f; font-family: Courier;">android:allow&nbsp;</span>tag. These tags can contain <data> tags that use existing data tag attributes as well as the <span style="color: #0d904f; font-family: Courier;">new android:query</span> and <span style="color: #0d904f; font-family: Courier;">android:fragment</span> attributes.</data></p> <p>An example of the <span style="color: #0d904f; font-family: courier;">AndroidManifest</span> syntax that will be supported:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">&lt;intent-filter&gt; &lt;action android:name=<span style="color: #ba2121;">"android.intent.action.VIEW"</span> /&gt; &lt;category android:name=<span style="color: #ba2121;">"android.intent.category.BROWSABLE"</span> /&gt; &lt;data android:scheme=<span style="color: #ba2121;">"http"</span> /&gt; &lt;data android:scheme=<span style="color: #ba2121;">"https"</span> /&gt; &lt;data android:domain=<span style="color: #ba2121;">"astore.com"</span> /&gt; &lt;uri-relative-filter-group&gt; &lt;data android:pathPrefix=<span style="color: #ba2121;">"/auth"</span> /&gt; &lt;data android:query=<span style="color: #ba2121;">"region=na"</span> /&gt; &lt;/uri-relative-filter-group&gt; &lt;uri-relative-filter-group android:allow=<span style="color: #ba2121;">"false"</span>&gt; &lt;data android:pathPrefix=<span style="color: #ba2121;">"/auth"</span> /&gt; &lt;data android:query=<span style="color: #ba2121;">"mobileoptout=true"</span> /&gt; &lt;/uri-relative-filter-group&gt; &lt;uri-relative-filter-group android:allow=<span style="color: #ba2121;">"false"</span>&gt; &lt;data android:pathPrefix=<span style="color: #ba2121;">"/auth"</span> /&gt; &lt;data android:fragmentPrefix=<span style="color: #ba2121;">"faq"</span> /&gt; &lt;/uri-relative-filter-group&gt; &lt;/intent-filter&gt;</span> </pre></div> <h4 style="text-align: left;"><span style="font-size: large;">More OpenJDK API support</span></h4> <p>Android 15 continues to add OpenJDK APIs. Developer Preview 2 includes support for additional <a href="https://developer.android.com/sdk/api_diff/v-dp2-incr/changes/java.lang.Math" target="_blank">math</a>/<a href="https://developer.android.com/sdk/api_diff/v-dp2-incr/changes/java.lang.StrictMath" target="_blank">strictmath</a> methods, lots of <a href="https://developer.android.com/sdk/api_diff/v-dp2-incr/changes/pkg_java.util" target="_blank">util updates</a> including sequenced <a href="https://developer.android.com/reference/java/util/SequencedCollection" target="_blank">collection</a>/<a href="https://developer.android.com/reference/java/util/SequencedMap" target="_blank">map</a>/<a href="https://developer.android.com/reference/java/util/SequencedSet" target="_blank">set</a>, <a href="https://developer.android.com/sdk/api_diff/v-dp2-incr/changes/java.util.zip.Deflater" target="_blank">ByteBuffer support in Deflater</a>, and <a href="https://developer.android.com/sdk/api_diff/v-dp2-incr/changes/pkg_java.security.spec" target="_blank">security key updates</a>. These APIs are updated on <a href="https://android-developers.googleblog.com/2023/11/the-secret-to-androids-improved-memory-latest-android-runtime-update.html" target="_blank">over a billion devices running Android 12+ through Android 15 through Google Play System updates</a> so you can target the latest programming features.</p> <h3 style="text-align: left;"><span style="font-size: x-large;">Giving your app more flexibility on more screens</span></h3> <p>Android 15 gives your apps the support to get the most out of Android's form factors, including large screens, flippables, and foldables.</p> <h4 style="text-align: left;"><span style="font-size: large;">Cover screen support</span></h4> <p>Your app can <a href="https://developer.android.com/reference/android/view/WindowManager#COMPAT_SMALL_COVER_SCREEN_OPT_IN" target="_blank">declare a property</a> that Android 15 uses to allow your Application or Activity to be presented on the small cover screens of supported flippable devices. These screens are too small to be considered as compatible targets for Android apps to run on, but your app can opt-in to supporting them, making your app available in more places.</p> <h3 style="text-align: left;"><span style="font-size: x-large;">A more private, secure Android</span></h3> <p>We're always looking to give users more transparency and control over their data while enhancing the core security features of the platform.</p> <h4 style="text-align: left;"><span style="font-size: large;">Screen record detection</span></h4> <p>Android 15 adds <a href="https://developer.android.com/reference/android/view/WindowManager?hl=en#addScreenRecordingCallback%28java.util.concurrent.Executor,%20java.util.function.Consumer%3Cjava.lang.Integer%3E%29" target="_blank">support for apps</a> to detect that they are being recorded. A callback is invoked whenever the app transitions between being visible or invisible within a screen recording. (An app is considered visible if activities owned by the registering process's UID are being recorded.) This way, if your app is performing a sensitive operation, you can inform the user that they're being recorded.</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;"><span style="color: green; font-weight: bold;">val</span> mCallback = Consumer&lt;Int&gt; { state -&gt; <span style="color: green; font-weight: bold;">if</span> (state == SCREEN_RECORDING_STATE_VISIBLE) { <span style="color: #408080; font-style: italic;">// we're being recorded</span> } <span style="color: green; font-weight: bold;">else</span> { <span style="color: #408080; font-style: italic;">// we’re not being recorded</span> } } <span style="color: green; font-weight: bold;">override</span> <span style="color: green; font-weight: bold;">fun</span> <span style="color: blue;">onStart</span>() { super.onStart() <span style="color: green; font-weight: bold;">val</span> initialState = windowManager.addScreenRecordingCallback(mainExecutor, mCallback) mCallback.accept(initialState) } <span style="color: green; font-weight: bold;">override</span> <span style="color: green; font-weight: bold;">fun</span> <span style="color: blue;">onStop</span>() { super.onStop() windowManager.removeScreenRecordingCallback(mCallback) }</span> </pre></div> <h3 style="text-align: left;"><span style="font-size: x-large;">Making Android more efficient</span></h3> <p>We are introducing new APIs that can help you gather insights about your apps, continuing to optimize the way background applications work, and providing APIs to help make tasks in your app more efficient to execute.</p> <h4 style="text-align: left;"><span style="font-size: large;">ApplicationStartInfo API</span></h4> <p>App startup on Android has always been a bit of a mystery. There was no easy way to know within your app whether it started from a cold, warm, or hot state. It was difficult to know how long your app spent during the various launch phases: forking the process, calling onCreate, drawing the first frame, and more. When your application class was instantiated, you had no way of knowing whether the app started from a broadcast, a content provider, a job, a backup, boot complete, an alarm, or an Activity.</p> <p>The <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/app/ApplicationStartInfo" target="_blank">ApplicationStartInfo</a></span> API on Android 15 gives you all of this and more. You can even choose to add your own timestamps into the flow to make it easy to collect timing data in one place. In addition to collecting metrics, you can use ApplicationStartInfo to help directly optimize app startup; for example, you can eliminate the costly instantiation of UI-related libraries within your Application class when your app is starting up due to a broadcast.</p> <h4 style="text-align: left;"><span style="font-size: large;">Changes to package stopped state</span></h4> <p>Android 15 includes several improvements to the <a href="https://developer.android.com/reference/android/content/pm/PackageManager" target="_blank">PackageManager</a>’s <a href="https://developer.android.com/reference/android/content/pm/ApplicationInfo#FLAG_STOPPED" target="_blank">Stopped State</a>. Apps that are in a Stopped State should only be leaving this state through direct user action. Furthermore, apps entering the Stopped State will have their <a href="https://developer.android.com/reference/android/app/PendingIntent" target="_blank">PendingIntents</a> removed. To help developers re-register their pending intents, apps will now receive the <a href="https://developer.android.com/reference/android/content/Intent" target="_blank">BOOT_COMPLETED</a> broadcast once they are removed from the Stopped State. Lastly, the new <a href="https://developer.android.com/reference/android/app/ApplicationStartInfo" target="_blank">ApplicationStartInfo</a> will also include the <a href="https://developer.android.com/reference/android/app/ApplicationStartInfo#wasForceStopped()" target="_blank">ApplicationStartInfo.wasForceStopped()</a> to let developers know that their app was put into the Stopped State.</p> <h4 style="text-align: left;"><span style="font-size: large;">Detailed app size information</span></h4> <p>Android has offered an API, <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/app/usage/StorageStats#getAppBytes%28%29" target="_blank">StorageStats.getAppBytes()</a></span>, that summarizes the installed size of an app as a single number of bytes, which is a sum of the APK size, the size of files extracted from the APK, and files that were generated on the device such as ahead-of-time (AOT) compiled code. This number is not very insightful in terms of how your app is using storage.</p> <p>Android 15 adds the <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/app/usage/StorageStats#getAppBytesByDataType%28int%29" target="_blank">StorageStats.getAppBytesByDataType([type])</a></span> API, which allows you to get insight into how your app is using up all that space, including apk file splits, AOT and speedup related code, dex metadata, libraries, and guided profiles.</p> <h4 style="text-align: left;"><span style="font-size: large;">Changes to foreground services</span></h4> <p>Android 14 began requiring Foreground Service Types. The documentation mentions that the dataSync Foreground Service type will be deprecated in a future version of Android.</p> <p>To support migrating away from the dataSync Foreground Service type, Android 15 includes the <span style="font-family: Courier;"><a href="https://developer.android.com/about/versions/15/behavior-changes-15#mediaprocessing-fgs-type" target="_blank">mediaProcessing Foreground Service type</a></span>, which is used to perform time-consuming operations on media assets, like converting media to different formats. In a future Beta release, this service will have a runtime limit of 6 hours.</p> <h4 style="text-align: left;"><span style="font-size: large;">SQLite database</span></h4> <p>Android 15 introduces new SQLite APIs that expose advanced features from the underlying SQLite engine that target specific performance issues that can manifest in apps.</p> <p>Developers should consult <a href="https://developer.android.com/topic/performance/sqlite-performance-best-practices" target="_blank">best practices for SQLite performance</a> to get the most out of their SQLite database, especially when working with large databases or when running latency-sensitive queries.</p> <ul style="text-align: left;"><ul> <li>Read-only deferred transactions: when issuing transactions that are read-only (don’t include write statements), use <a href="https://developer.android.com/reference/kotlin/android/database/sqlite/SQLiteDatabase?hl=en#begintransactionreadonly" target="_blank">beginTransactionReadOnly()</a> and <a href="https://developer.android.com/reference/kotlin/android/database/sqlite/SQLiteDatabase?hl=en#begintransactionreadonly" target="_blank">beginTransactionWithListenerReadOnly</a>(<a href="https://developer.android.com/reference/kotlin/android/database/sqlite/SQLiteTransactionListener" target="_blank">SQLiteTransactionListener</a>) to issue read-only DEFERRED transactions. Such transactions may run concurrently with each other, and if the database is in WAL mode, they can run concurrently with IMMEDIATE or EXCLUSIVE transactions.</li></ul></ul> <ul style="text-align: left;"><ul> <li>Row counts and IDs: new APIs were added to retrieve the count of changed rows or the last inserted row ID without issuing an additional query. <a href="https://developer.android.com/reference/kotlin/android/database/sqlite/SQLiteDatabase?hl=en#getlastchangedrowcount" target="_blank">getLastChangedRowCount()</a> will return the number of rows that were inserted, updated, or deleted by the most recent SQL statement within the current transaction, while <a href="https://developer.android.com/reference/kotlin/android/database/sqlite/SQLiteDatabase?hl=en#gettotalchangedrowcount" target="_blank">getTotalChangedRowCount()</a> will return the count on the current connection. <a href="https://developer.android.com/reference/kotlin/android/database/sqlite/SQLiteDatabase?hl=en#getlastinsertrowid" target="_blank">getLastInsertRowId()</a> will return the “rowid” of the last row to be inserted on the current connection.</li></ul></ul><ul style="text-align: left;"><ul> <li>Raw statements: issue a raw SQlite statement, bypassing convenience wrappers and any additional processing overhead that they may incur.</li> </ul></ul> <h3 style="text-align: left;"><span style="font-size: x-large;">Media refinements</span></h3> <p>Each release of Android focuses on improving the media experience.</p> <h4 style="text-align: left;"><span style="font-size: large;">HDR Headroom Control</span></h4> <image><div style="text-align: center;"><img alt="side by side images of SDR content" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_AuJ-QbBtz1PJqni3ElIRu-lLiJ7mrXu4wT9ASszd0r5E-yfxqgYVv1lvJObsto-248__xwLH4acFDA78tRLLBuLJHAK7E4JGJvufbX6W55-5vL7HOM_eEngxvXcjQZhh6n-E9P88csAvduTKttZtHsVNqJK1FIh15n6Z34VRB2rVczbD1YdQYRiD49A/s16000/image1.png" /></div><imgcaption><center><em>The image on the left shows a view with SDR content. The image on the right simulates perceived headroom issues with SDR and HDR mixed content, which we can avoid by setting the desired HDR headroom.</em></center></imgcaption></image> <p>Android 15 chooses HDR headroom that is appropriate for the underlying device capabilities and bit-depth of the panel; for pages that have lots of SDR content such as a messaging app displaying a single HDR thumbnail, this can end up adversely influencing the perceived brightness of the SDR content. Android 15 allows you to control the HDR headroom with <a href="https://developer.android.com/reference/kotlin/android/view/Window?hl=en#setdesiredhdrheadroom" target="_blank">setDesiredHdrHeadroom</a> to strike a balance between SDR and HDR content.</p> <h4 style="text-align: left;"><span style="font-size: large;">Loudness Control</span></h4> <image></image> <p></p><div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;"><img alt="moving image of Droid wearing headphones and bopping his head rhythmically" border="0" height="113" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSyIK5luBluIrqh4fzThfL5vDvnfTGQxY8gZTaHz-OK-l3kUXL-WcrnqN-VYjBVkoRnUJLDoM3F5lDAM6s1AkiF1jowA2XlAdvPhFDaqHMmfw4pSEdutedCV9WfDxgiZxKxlFO5_e6K60MPfNVoGenGkEUa-wm6Mvie8WBe-9HnLq-cNC0G06uIffzuAA/w200-h113/image7.gif" width="200" /></div>Android 15 introduces support for the <a href="https://shop.cta.tech/products/loudness-standard-for-over-the-top-television-and-online-video-distribution-for-mobile-and-fixed-devices-ansi-cta-2075" target="_blank">CTA-2075</a> loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones, speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.<p></p> <p>To enable this feature, you need to ensure loudness metadata is available in your AAC content and enable the platform feature in your app. For this, you instantiate a <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/media/LoudnessCodecController" target="_blank">LoudnessCodecController</a></span> object by calling its <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/media/LoudnessCodecController#create%28int%29" target="_blank">create</a></span> factory method with the audio session ID from the associated AudioTrack; this automatically starts applying audio updates. You can pass an <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/media/LoudnessCodecController.OnLoudnessCodecUpdateListener" target="_blank">OnLoudnessCodecUpdateListener</a></span> to modify/filter loudness parameters before they are applied on the <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/media/MediaCodec" target="_blank">MediaCodec</a></span>.</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;"><span style="color: #408080; font-style: italic;">// media contains metadata of type MPEG_4 OR MPEG_D</span> <span style="color: green; font-weight: bold;">val</span> mediaCodec = ... <span style="color: green; font-weight: bold;">val</span> audioTrack = AudioTrack.Builder() .setSessionId(sessionId) .build() ... <span style="color: #408080; font-style: italic;">// create new loudness controller that applies the parameters to the MediaCodec</span> <span style="color: green; font-weight: bold;">try</span> { <span style="color: green; font-weight: bold;">val</span> lcController = LoudnessCodecController.create(mSessionId) <span style="color: #408080; font-style: italic;">// starts applying audio updates for each added MediaCodec</span></span> </pre></div> <p>AndroidX media3 ExoPlayer will soon be updated to leverage LoudnessCodecController APIs for a seamless app integration.</p> <h4 style="text-align: left;"><span style="font-size: large;">Use Spatializer instead of Virtualizer</span></h4> <p>Android 12 included the <a href="https://developer.android.com/reference/android/media/Spatializer" target="_blank">Spatializer</a> class, which enables querying the capabilities and behavior of sound spatialization on the device. In Android 15, we're deprecating the Virtualizer class; instead use <a href="https://developer.android.com/reference/android/media/AudioAttributes.Builder#setSpatializationBehavior%28int%29" target="_blank">AudioAttributes.Builder.setSpatializationBehavior</a> to characterize how you want your content to be played when spatialization is supported.</p> <p>AndroidX media3 ExoPlayer 1.0 enables spatial audio by default for multichannel audio when the device supports it. See the <a href="https://android-developers.googleblog.com/2023/04/delivering-immersive-sound-experience-with-spatial-audio.html" target="_blank">blog post</a> and <a href="https://developer.android.com/media/grow/spatial-audio#exoplayer" target="_blank">documentation</a> for more information, including APIs to control the feature.</p> <h3 style="text-align: left;"><span style="font-size: x-large;">User Experience</span></h3> <p><a href="https://developer.android.com/reference/android/app/AutomaticZenRule" target="_blank">AutomaticZenRules</a> allow apps to customize Attention Management (Do Not Disturb) rules and decide when to activate/deactivate them. Android 15 greatly enhances these rules with the goal of improving the user experience. It does this by:</p> <ul><ul> <li>Adding types to AutomaticZenRule, allowing the system to apply special treatment to some rules</li></ul></ul> <ul style="text-align: left;"><ul> <li>Adding an icon to AutomaticZenRule, helping to make the modes be more recognizable</li></ul></ul> <ul style="text-align: left;"><ul> <li>Adding a triggerDescription string to AutomaticZenRule that describes the conditions on which the rule should become active for the user</li></ul></ul> <ul style="text-align: left;"><ul> <li>Added ZenDeviceEffects to AutomaticZenRule, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper</li></ul></ul> <ul style="text-align: left;"><ul> </ul></ul> <h3 style="text-align: left;"><span style="font-size: x-large;">Behavior changes</span></h3> <p>Because backward compatibility is so important to us, we try to limit impactful behavior changes, but some are inevitable.</p> <h4 style="text-align: left;"><span style="font-size: large;">Elegant fonts everywhere</span></h4> <p>Once your app targets Android 15, the <a href="https://developer.android.com/reference/android/R.attr#elegantTextHeight" target="_blank">elegantTextHeight</a> <a href="https://developer.android.com/reference/android/widget/TextView" target="_blank">TextView</a> attribute becomes true by default, replacing the compact font used by default with some scripts that have large vertical metrics with one that is much more readable. The compact font was introduced to prevent breaking layouts; Android 13 prevents many of these breakages by allowing the text layout to stretch the vertical height utilizing the <a href="https://developer.android.com/reference/android/widget/TextView#attr_android:fallbackLineSpacing" target="_blank">fallbackLineSpacing</a> attribute. In Android 15, the compact font still remains in the system, so your app can set elegantTextHeight to false to get the same behavior as before, but it is unlikely to be supported in upcoming releases. So, if your application supports the following scripts: Arabic, Lao, Myanmar, Tamil, Gujarati, Kannada, Malayalam, Odia, Telugu or Thai, please test your applications by setting elegantTextHeight to true.</p> <p>Examples and screenshots</p> <p>Default behavior as of Android 14</p> <image><div style="text-align: center;"><img alt="Default behavior as of Android 14" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVth_Q6D51ZwPkuPFx00fVwuAZQ7UOUSf6JBMvSJSPtaNd4KZUM_xENR29XHFPCo-NR6KhTMN16dASwfV2v-TCZc0U3eX6MpKwclJ5zHzz4RX30cA2f5WSQ1-wvUQcQlo2mpkAxZb0e1WnpzdnYojBVUiLvVl8roUrwgpHxLbrDawOFWQEHvkvqwt0bqk/s16000/image9.png" /></div></image> <p>Default behavior for applications that target Android 15</p> <image><div style="text-align: center;"><img alt="Default behavior as of Android 15" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirbCIez5t8fvMW_n7W9mzyQJXNxRVA_xmhyphenhyphenxOy0u-nNnGOdg5ya3v-6SMSA3W2hZsPtlHhh0ErIfeqHuWOHpEcf32a6Wu5-ZLIY6XLUtdvcPcsvH_Gr41OsRlfRH1hymSvOlmBUCdIFqBPGpBXozwYhu7Dt8J8yuQOMQcLFwieWxhoxQij4tMcD2kXcMc/s16000/image10.png" /></div></image> <h3 style="text-align: left;"><span style="font-size: x-large;">App compatibility</span></h3> <image><div style="text-align: center;"><img alt="Android 15 release timeline" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf-Qt_ze2lPBVrl8FCfh1HOxXuwtgy5_UMG388ncashPI-kkYLGgf4pwV94jnsB0YjkZxmimc2iejRDBZXgElJ6YjuUoI2V5nhC7vLn1-7z188ve_SPFu1AxPUE9IprMybK-cb49dkXjaGkSKsckhNTMVu48typ1kJZpBb0hIo8WGoJd-dlVO9_-Vlh-E/s1600/image2.png" width="100%" /></div></image> <p>To give you more time to plan for app compatibility work, we’re letting you know our Platform Stability milestone well in advance.</p> <p>At this milestone, we’ll deliver final SDK/NDK APIs and also final internal APIs and app-facing system behaviors. We’re expecting to reach Platform Stability in June 2024, and from that time you’ll have several months before the official release to do your final testing. The release timeline details are <a href="https://developer.android.com/about/versions/15/overview#timeline" target="_blank">here</a>.</p> <h1 style="text-align: left;"><span style="font-size: x-large;">Get started with Android 15</span></h1> <p>The Developer Preview has everything you need to try the Android 15 features, test your apps, and give us feedback. You can get started today by <a href="https://developer.android.com/about/versions/15/get#pixel_flash_install" target="_blank">flashing a system image</a> onto a Pixel 6, 7, or 8 series device, along with the Pixel Fold and Pixel Tablet. We are not offering sideload images for Developer Preview 2. If you don’t have a Pixel device, you can <a href="https://developer.android.com/about/versions/15/get#on_emulator" target="_blank">use the 64-bit system images with the Android Emulator</a> in Android Studio. If you've already installed Android 15 Developer Preview 1, you should get an over-the-air update to Android 15 Developer Preview 2.</p> <p>For the best development experience with Android 15, we recommend that you use the <a href="https://developer.android.com/studio/preview" target="_blank">latest preview of Android Studio Jellyfish</a> (or more recent Jellyfish+ versions). Once you’re set up, here are some of the things you should do:</p> <ul><ul> <li>Try the new features and APIs - your feedback is critical during the early part of the developer preview. Report issues in our tracker on the <a href="https://developer.android.com/about/versions/15/feedback" target="_blank">feedback page</a>.</li></ul></ul> <ul style="text-align: left;"><ul> <li>Test your current app for compatibility - learn whether your app is affected by changes in Android 15; install your app onto a device or emulator running Android 15 and extensively test it.</li> </ul></ul> <p>We’ll update the preview system images and SDK regularly throughout the Android 15 release cycle. This preview release is for developers only and not intended for daily or consumer use, so we're making it available by manual download only. Once you’ve manually installed a preview build, you’ll automatically get future updates over-the-air for all later previews and Betas. Read more <a href="https://developer.android.com/about/versions/15/overview#pixel" target="_blank">here</a>.</p> <p>If you intend to move from the <a href="https://developer.android.com/about/versions/14/get-qpr" target="_blank">Android 14 QPR Beta program</a> to the Android 15 Developer Preview program and don't want to have to wipe your device, we recommend that you move to Developer Preview 2 now. Otherwise you may run into time periods where the Android 14 Beta will have a more recent build date which will prevent you from going directly to the Android 15 Developer Preview without doing a data wipe.</p> <p>As we reach our Beta releases, we'll be inviting consumers to try Android 15 as well, and we'll open up enrollment for the Android Beta program at that time. For now, please note that the Android Beta program is not yet available for Android 15.</p> <p>For complete information, visit the <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a>.</p> <p><small><em>Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.</em></small></p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-4775169641838916946 2024-03-14T13:00:00.000-07:00 2024-03-14T13:12:37.358-07:00 Tune in for Google I/O on May 14 <meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxqoLGBufRoqc2ZEiGobjzE3A2atge74sLY_IgV4OICzMzqGu2bIbNgTUFHnc5ra8ah-xmFynqiNRR2gIarzCc34K40DTrfbT-CEN3wiBIiW8M_yVoAMKTJqb2X82jQSqTa9L6fgNruk-wFjij_Iao9Gv3BdxCzsitrMj-MEDbSLd6kufQk7UhT3p6Z0k/s1600/IO-24-Profile-Social-AD.png"> <img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxqoLGBufRoqc2ZEiGobjzE3A2atge74sLY_IgV4OICzMzqGu2bIbNgTUFHnc5ra8ah-xmFynqiNRR2gIarzCc34K40DTrfbT-CEN3wiBIiW8M_yVoAMKTJqb2X82jQSqTa9L6fgNruk-wFjij_Iao9Gv3BdxCzsitrMj-MEDbSLd6kufQk7UhT3p6Z0k/s1600/IO-24-Profile-Social-AD.png"> <em>Posted by Jeanine Banks ? VP &amp; General Manager, Developer X, and Head of Developer Relations</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGiGRCsR-i1iR8gorL9E_IKpJdXH6mVW9PV8eZmjzvkj9FffXZj8QAaesPXqocINIxEELPHzDJHmhCxsRDYoU_lXoshHzHJqK7ICgq2gQGb5rqnUK9LsIovAnmmkYDh0iMw7r6JV8QjxPsTANUzUWyt5ZqvOgodiNxUFTOfNIvm6-_wqgj8cK8U7smdOY/s1600/IO24_SVD%20Blog%20Banner%2001_4209%E2%80%8A%C3%97%E2%80%8A1253.png" imageanchor="1" ><img style="100%" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGiGRCsR-i1iR8gorL9E_IKpJdXH6mVW9PV8eZmjzvkj9FffXZj8QAaesPXqocINIxEELPHzDJHmhCxsRDYoU_lXoshHzHJqK7ICgq2gQGb5rqnUK9LsIovAnmmkYDh0iMw7r6JV8QjxPsTANUzUWyt5ZqvOgodiNxUFTOfNIvm6-_wqgj8cK8U7smdOY/s1600/IO24_SVD%20Blog%20Banner%2001_4209%E2%80%8A%C3%97%E2%80%8A1253.png" data-original-width="1058" data-original-height="800" /></a> <p><a href="https://io.google/2024/?utm_source=blogpost&amp;utm_medium=pr&amp;utm_campaign=svd-gfd&amp;utm_content=" target="_blank">Google I/O</a> is arriving this year on May 14th and you’re invited to join us online! I/O offers something for everyone, whether you are developing a new application, modernizing an existing one, or transforming it into a business.</p> <p>The Gemini era unlocks new possibilities for developers to build creative and productive AI-enabled applications. I/O is where you’ll hear how you can get from idea to production AI applications faster. We’re excited to share what’s new for mobile, web, and multiplatform development, and how to scale your applications in the cloud. You will be able to dive deeper into topics that interest you with over 100 sessions, workshops, codelabs, and demos.</p> <p>Visit the <a href="https://io.google/2024/?utm_source=blogpost&amp;utm_medium=pr&amp;utm_campaign=svd-gfd&amp;utm_content=" target="_blank">Google I/O</a> site and register to stay informed about I/O and other related events coming soon. The livestreamed keynotes start May 14 at 10am PT, so mark your calendar.</p> <p>If you haven’t already, go try out our newest <a href="https://io.google/2024/puzzle/?utm_source=blogpost&amp;utm_medium=pr&amp;utm_campaign=svd-gfd&amp;utm_content=" target="_blank">Google I/O puzzle</a> and head to <a href="https://www.instagram.com/googlefordevs/" target="_blank">@googlefordevs on Instagram</a> if you need a hint.</p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-4064552180747844412 2024-03-12T09:00:00.000-07:00 2024-03-12T09:00:00.148-07:00 Key product updates from the 2024 Google for Games Developer Summit <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrGpBeUkUN6KAkglqR0AZd4-Qfvt0glXWMXBWrgBJQGazGH78JtSyNRGy8UpUSqcwaSKykhidO1p3jx7ebvmjaDcas-NHb-ti_FdcjODWjlML_mBQ5M2mbwTIz66YgPCdQ9__vPDbnd1QEpxThz-8U97tYmD8AdClYb3szCSorpNaViDo18lhFpMSSdqY/s1600/GGDS-Keynote-24.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrGpBeUkUN6KAkglqR0AZd4-Qfvt0glXWMXBWrgBJQGazGH78JtSyNRGy8UpUSqcwaSKykhidO1p3jx7ebvmjaDcas-NHb-ti_FdcjODWjlML_mBQ5M2mbwTIz66YgPCdQ9__vPDbnd1QEpxThz-8U97tYmD8AdClYb3szCSorpNaViDo18lhFpMSSdqY/s1600/GGDS-Keynote-24.png" style="display: none;" /> <em>Posted by Aurash Mahbod ? General Manager, Games on Google Play</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEAOFsHnnWtKy84l0Uo6JIO1m7YN_Wkgm5mJr6lRx8ZPhaNHAtFvl-b2dA7izOztETWY1Z1Zn-EC__tQ4DaUJoqFTw53j08QNboV03flNnwVu5FIJhK-Ru2YZCHsVC0HIFM8huyO2v7JfwTwZCMB2OMF7D1WZJBP74b7dOhX5DGOEoy08ctPtsT6gL5SU/s1600/GGDS%20Android%20Blog%20Post%20Main%20Image%20%28%20Asset%201%20%29%20%28%204209%20x%201253px%20%29.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEAOFsHnnWtKy84l0Uo6JIO1m7YN_Wkgm5mJr6lRx8ZPhaNHAtFvl-b2dA7izOztETWY1Z1Zn-EC__tQ4DaUJoqFTw53j08QNboV03flNnwVu5FIJhK-Ru2YZCHsVC0HIFM8huyO2v7JfwTwZCMB2OMF7D1WZJBP74b7dOhX5DGOEoy08ctPtsT6gL5SU/s1600/GGDS%20Android%20Blog%20Post%20Main%20Image%20%28%20Asset%201%20%29%20%28%204209%20x%201253px%20%29.png" /></a> <p>We’re on a mission to make Google Play the best destination for gaming, and your amazing games are what make it possible. That’s why we’re investing in tools that empower you to achieve more by increasing user engagement, accelerating your business growth, and maximizing your reach.</p> <p>Today, we shared more details about those investments at the <a href="https://gamedevsummit.withgoogle.com/" target="_blank">Google for Games Developer Summit</a>. Check out the <a href="https://gamedevsummit.withgoogle.com/events/ggds-keynote-2024" target="_blank">Keynote session on demand</a>, or keep reading for key product updates from the summit.</p> <h3>More ways to increase user engagement</h3> <p>We know that identity, progress, and achievements are important to gamers. With <a href="https://developer.android.com/games/pgs/overview" target="_blank">Play Games Services</a> (PGS), gamers can switch between devices and jump back into gameplay instantly, on any device connected with PGS<sup>1</sup>. Based on your feedback, we’ve made it easier for you to integrate PGS and provide more relevant experiences for your users:</p> <ul style="text-align: left;"><ul> <li>No database changes are required to integrate PGS, and you no longer need to store the association between in-game accounts and PGS profiles.</li></ul></ul><ul style="text-align: left;"><ul> <li>You can start automatically syncing your users’ sign in information via PGS, including those without a profile, ensuring their progress is available to be synced when they change to a new device<sup>2</sup>.</li></ul></ul><ul style="text-align: left;"><ul> <li>Throughout this year, we’re rolling out more ways for you to create engaging in-game content by achievement level or game progress. For example, you will be able to create Quests within your game to challenge players while unlocking rewards using Play Points.</li> </ul></ul> <p>To start creating these engaging experiences within your game, <a href="https://developer.android.com/games/pgs/overview" target="_blank">integrate PGS today</a> ? and stay tuned for more capabilities coming soon.</p> <p>We’ve also been working to tailor our store experience to better engage users who’ve already installed your game. Starting today, we’re rolling out <b>enhancements to store listings</b> to more prominently display your game updates, new content, and promotions directly within Play<sup>3</sup>. Your store listing page will source relevant content to keep your audience engaged with your game, including your latest YouTube videos, AI-generated FAQs, and more.</p> <p>These improvements are currently limited to English language users and to select titles that are part of the early access program. If you’re interested in testing the enhanced store listing for your game and helping shape this feature with your feedback, you can <a href="https://docs.google.com/forms/d/e/1FAIpQLSdw0PjDz1AvNK8CVH5JsyMBf5qh0EQZEpRsGed-GxBnLxNmFg/viewform" target="_blank">express interest here</a>.</p> <image><div style="text-align: center;"><img alt="moving image of Games Hub (left) and Games Home (right)" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWbPWBqKAtdEgV4QvoUJE3yL7XCgA8SqSJ51pJTo6KoZbblKHeJv3jwxe52o36FN3m9sEmgK3T7ZvxgE2dXE9MIXAPhlSfflKKLNMeABk1RownU04kcP7r3ldvVeIvdMcbW3h_JW9lA0eCC1xADEsQ90rhuxXWs6yhdcxbYW-olCbY0_H04IyYabwGNnQ/s1600/GIF_2_GamesHub_and_GamesHome_white%20%281%29.gif" width="100%" /></div></image> <h3>Expanded programs to accelerate growth</h3> <p>We’re also expanding our most popular programs to help you accelerate your business growth.</p> <ul style="text-align: left;"><ul> <li>With over 220M members, Google Play Points is one of the largest loyalty programs in the world. Available in over 35 markets and covering the vast majority of purchase-ready, active spenders, Play Points helps you retain users and reach new ones. This year, we’re excited to announce that we’ll be <b>launching Google Play Points in Brazil</b>.</li></ul></ul><ul style="text-align: left;"><ul> <li>Play Points now offers the ability to <b>set limited quantities for exclusive in-game offers</b>, building excitement and boosting participation around limited deals. These offers have been highly effective at reaching paying users and driving repeat purchases.</li></ul></ul> <image><div style="text-align: center;"><img alt="image" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY_obu2GJGjR0yW5YZ64P5s_-E3KGVhuEFJdPxPtwNSukytd1RlqQU4_3w3msLW9mSn1698Z2rFAv5rUHYWA3_if40IZn1_tkYJNPJpk-HydUGD0u_pM4p6wNApgBEPy5gOGDQMG8dkTo9_4-mKOs_BOy7k8LpmvwqM58J1JnJSrCEUiIH_UPRHezI8vs/s1600/GGDS%20Android%20Blog%20Post%20Asset%202%20%281%29.png" width="100%" /></div></image> <ul style="text-align: left;"><ul> <li>Google Play Pass, which has grown over 120% in subscriptions over the past year, is expanding to include in-game offers from popular games. We’re launching in-game offers in 21 markets including Japan, and <b>launching Play Pass in Korea later this year</b>.</li></ul></ul><ul style="text-align: left;"><ul> <li>Some of the world’s largest mobile games such as <a href="https://play.google.com/store/apps/details?id=com.ea.gp.fifamobile&amp;hl=en_US&amp;gl=US" target="_blank">EA SPORTS FC™ Mobile</a>, <a href="https://play.google.com/store/apps/details?id=com.mobile.legends&amp;hl=en_US&amp;gl=US" target="_blank">Mobile Legends: Bang Bang</a>, <a href="https://play.google.com/store/apps/details?id=com.scopely.monopolygo&amp;hl=en_US&amp;gl=US" target="_blank">MONOPOLY GO!</a> and <a href="https://play.google.com/store/apps/details?id=com.roblox.client&amp;hl=en_US&amp;gl=US" target="_blank">Roblox</a> use Play Pass to reach and engage new buyers, with the majority of users spending more than the offer amount provided by Play Pass<sup>4</sup>.</li> </ul></ul> <image><div style="text-align: center;"><img alt="moving image of Google Games play pass" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL30nQR62_lLi6gqGwUNQTX6YACYLCFuHkYqujV30A9XWhKlqtPN_du6Lwtt1_wlpKlLGt8Xoje2S1q_h6EIzDm0zDxpGC47UNCWQg814QxlqMNFqwOJvnYc583QtyrxadMBqEeHUReJnbTLAJemv9YnjtAX6lZ169E-sye_ze_3cVCKzrr5R1sY9IxWU/s1600/GIF_1_Play%20Pass%20%28dark%20mode%29%20white.gif" width="100%" /></div></image><br /> <h3>New ways to maximize reach</h3> <p>Finally, to help you reach more users with your games, we’re making it easier to scale and grow your multi-platform games across mobile, tablets, Chromebooks, and Windows PCs<sup>5</sup>.</p> <ul><ul> <li>As of today, Google Play Games on PC includes over 3,000 titles in over 140 countries, with developers seeing up to 35% more playtime<sup>6</sup>. This year, we’re adding <b>support for native PC game publishing</b>. Popular PC games such as <a href="https://play.google.com/store/apps/details?id=com.ncsoft.lineage2mnu&amp;hl=en_US&amp;gl=US" target="_blank">Lineage2M</a>, <a href="https://play.google.com/store/apps/details?id=com.kakaogames.odin&amp;hl=en_US&amp;gl=US" target="_blank">Odin: Valhalla Rising</a>, <a href="https://play.google.com/store/apps/details?id=com.miHoYo.GenshinImpact&amp;hl=en_GB" target="_blank">Genshin Impact</a>, and <a href="https://play.google.com/store/apps/details?id=com.sgra.dragon&amp;hl=en_US&amp;gl=US" target="_blank">Dragonheir: Silent Gods</a> are already available with <a href="https://sololeveling.netmarble.com/en" target="_blank">Solo Leveling: Arise</a> coming soon this year. If you have native PC games and are looking to expand to a global audience of gamers, please <a href="https://docs.google.com/forms/d/e/1FAIpQLSe5xWN_i70u_--3nSUCeahEhwbJyGHVDkZSB3FGAxB7B5MMRQ/viewform?usp=header_link" target="_blank">express interest here</a>.</li></ul></ul> <image><div style="text-align: center;"><img alt="ALT TEXT" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-GkHwMj8PgKaMGbOyvPMlQxHG86eqgtWuR0U3WeE8NAwQ7UFcOhXdCgLw9FoAp8G65xZ046BX1o5ohm_CB8M7R2Aau6gAwtZiY80mlNbhVLW_oTKf_9LCO0azGF_VjOU_IGNX5PG-9Bls6X95vLmGzlX7pGx722et1L1Ks_rDxiO8IAnK_ye7qN-GQtU/s1600/GIF_3_GPG%20white.gif" width="100%" /></div></image> <ul><ul> <li>We’re also making user acquisition campaigns easier and more helpful for PC games. You can now use the <b><a href="https://android-developers.googleblog.com/2024/03/introducing-play-install-referrer-for-google-play-games-on-pc.html" target="_blank">Play Install Referrer API for Google Play Games</a></b> to achieve closed-loop marketing on PC, passing campaign or click information into your game so you can optimize marketing campaigns across ad networks, social, and other channels.</li> </ul></ul> <p>For more news from the Google for Games Developer Summit, check out <a href="http://g.co/gamedevsummit" target="_blank">g.co/gamedevsummit</a>. You can also <a href="https://developers.googleblog.com/2024/03/google-for-games-is-coming-to-gdc-2024.html" target="_blank">connect with us at GDC in San Francisco</a>. We’ll be hosting a full day of sessions on March 19 and a week of hands-on product experience at the Moscone Center, West Hall, Level 2 Lobby from March 18 to March 22.</p> <p>As always, thank you for partnering with us to bring amazing games to players everywhere.</p><p style="text-align: left;"><br /></p> ___________________ <div style="text-align: left;"><em><small><sup>1</sup>Subject to game availability and PC compatibility.</small></em></div> <div style="text-align: left;"><em><small><sup>2</sup>This feature requires PGS SDK V2 integration. Developers can save sign-in information to PGS for users, but only retrieve this once the user has set up a profile.</small></em></div> <div style="text-align: left;"><em><small><sup>3</sup>Feature availability limited to English language users and select titles that are part of the early access program.</small></em></div> <div style="text-align: left;"><em><small><sup>4</sup>Google internal data. New buyer refers to users who made a purchase during this pilot experiment after making no purchase for the past 50 days.</small></em></div> <div style="text-align: left;"><em><small><sup>5</sup>Windows is a trademark of the Microsoft group of companies.</small></em></div> <div style="text-align: left;"><em><small><sup>6</sup>Google internal data.</small></em></div><p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-3106593057660264628 2024-03-12T08:45:00.000-07:00 2024-03-12T08:45:00.125-07:00 Introducing Play Install Referrer for Google Play Games on PC <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwfGYBEanskKwqn3-e_ZHYNFlLki6v5C3WtrilQT6sxD60Zu1-osVht7cR-uspONCCI5XgbgDo8LIdutIAkww_n9-xb3BVi6ynklugk-3KGiODuTOGcNzNVuneGQRcvmL65JVordsHbmVuXsN8Kp848RFbLFzZ1N8Zm4jVUE3fVSVIPXle2l8G6_C7C6o/s1600/Editorial-Battlestar-referrer-social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwfGYBEanskKwqn3-e_ZHYNFlLki6v5C3WtrilQT6sxD60Zu1-osVht7cR-uspONCCI5XgbgDo8LIdutIAkww_n9-xb3BVi6ynklugk-3KGiODuTOGcNzNVuneGQRcvmL65JVordsHbmVuXsN8Kp848RFbLFzZ1N8Zm4jVUE3fVSVIPXle2l8G6_C7C6o/s1600/Editorial-Battlestar-referrer-social.png" style="display: none;" /> <em>Posted by Arjun Dayal, Director ? Google Play Games</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB5vIb0Q2nc5lZixebeiGSbntR60RjDnu0mFKGwB8oRI6z7rFZ0FzmpzR0HhN7W6IiCNZqif6hINaHZC91nBbO9JjBXhNi_9X70Pe3XqkYGjKEIPeoQN8v-gK7Vm7Rq-1gD1rMtLDgMkQq4PGGGXMm7hik5vv6k7Tf-GstqJYGD_hDWhEaYqKaH3wORiM/s1600/Editorial-Battlestar-referrer-header.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB5vIb0Q2nc5lZixebeiGSbntR60RjDnu0mFKGwB8oRI6z7rFZ0FzmpzR0HhN7W6IiCNZqif6hINaHZC91nBbO9JjBXhNi_9X70Pe3XqkYGjKEIPeoQN8v-gK7Vm7Rq-1gD1rMtLDgMkQq4PGGGXMm7hik5vv6k7Tf-GstqJYGD_hDWhEaYqKaH3wORiM/s1600/Editorial-Battlestar-referrer-header.png" /></a> <p>Making informed marketing decisions relies on identifying your most valuable user acquisition channels for your games. By tracking referral data, you can understand which traffic sources send the most users to download your app from the Google Play store. These insights can help you make the most of your advertising spend and maximize ROI. That’s why in 2017, we launched the&nbsp;<a href="https://developer.android.com/google/play/installreferrer/library.html" target="_blank">Play Install Referrer API</a>, which gives you an easy, reliable way to track your apps’ referral information directly from the Play store.</p> <p>Until now, this feature was only available for your games in the mobile Play store. Today, we’re pleased to announce support for Google Play Games on PC, allowing you to attribute conversions from your marketing activities on the Web<sup>1</sup>. If you use the <a href="https://developer.android.com/google/play/installreferrer" target="_blank">Google Play Install Referrer</a> API to track your referral sources, you can now attribute conversions to specific campaigns directly from Google Play by manually retrieving referral information, or using third-party analytics tools from Google’s <a href="https://support.google.com/google-ads/answer/12961402" target="_blank">App Attribution Partners</a>.</p> <p>Getting started is easy. First, generate a Google Play URL for your game’s <a href="https://developer.android.com/distribute/marketing-tools/linking-to-google-play#OpeningDetails" target="_blank">Google Play store listing page</a> and add a referrer query parameter for your Web campaign. Then, when a PC user clicks the link, they will be redirected to your game’s listing page on the <a href="https://play.google.com/store/games" target="_blank">Google Play Web store</a>, which will give them the option to “Install on Windows.” Once the user launches your game, you’ll be able to track the referral using the <a href="https://developer.android.com/google/play/installreferrer" target="_blank">Google Play Install Referrer library</a>.</p> <blockquote><span style="font-size: large;"><i>“With integration support from Adjust, developers can quickly and efficiently measure marketing campaigns for their games on Google Play Games on PC. We’re excited about the opportunity this brings for developers to broaden their games’ reach and strengthen cross-platform measurement.”&nbsp;</i></span><p></p><p><b>- Gijsbert Pols, Director of Connected TV &amp; New Channels, Adjust</b></p></blockquote> <p><a href="https://developer.android.com/games/playgames/user-acquisition" target="_blank">Learn more</a> about third-party referral codes for Google Play Games on PC and start optimizing your marketing performance today.</p><br/> ______________ <p><small><em><sup>1</sup>Subject to device compatibility with Google Play Games on PC.</em></small></p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-7623513668096459593 2024-03-12T03:00:00.000-07:00 2024-03-14T05:38:33.383-07:00 Meet the class of 2024 for Google Play’s Indie Games Accelerator <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfVTaPiCaraBuzzW_aJxpR7XnYwNbWI5LGOb-wBIlGx5wVa_y3qcxtvlK6-llvEocV-pOWtmds72i4DWdykXuROMnjcNbRwgjOq6t0c-fLSgp1fF3SBWMwQM_9XTAeKgNhE2gEsvQjX3k23lOmd5Iwa0HK3P5h4w_T8ilxJZcgMLHOfGFwb6y3O961nl8/s1600/image1.gif" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfVTaPiCaraBuzzW_aJxpR7XnYwNbWI5LGOb-wBIlGx5wVa_y3qcxtvlK6-llvEocV-pOWtmds72i4DWdykXuROMnjcNbRwgjOq6t0c-fLSgp1fF3SBWMwQM_9XTAeKgNhE2gEsvQjX3k23lOmd5Iwa0HK3P5h4w_T8ilxJZcgMLHOfGFwb6y3O961nl8/s1600/image1.gif" style="display: none;" /> <em>Posted by Leticia Lago ? Developer Marketing</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfVTaPiCaraBuzzW_aJxpR7XnYwNbWI5LGOb-wBIlGx5wVa_y3qcxtvlK6-llvEocV-pOWtmds72i4DWdykXuROMnjcNbRwgjOq6t0c-fLSgp1fF3SBWMwQM_9XTAeKgNhE2gEsvQjX3k23lOmd5Iwa0HK3P5h4w_T8ilxJZcgMLHOfGFwb6y3O961nl8/s1600/image1.gif"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfVTaPiCaraBuzzW_aJxpR7XnYwNbWI5LGOb-wBIlGx5wVa_y3qcxtvlK6-llvEocV-pOWtmds72i4DWdykXuROMnjcNbRwgjOq6t0c-fLSgp1fF3SBWMwQM_9XTAeKgNhE2gEsvQjX3k23lOmd5Iwa0HK3P5h4w_T8ilxJZcgMLHOfGFwb6y3O961nl8/s1600/image1.gif" /></a> <p>Today, we’re excited to reveal <a href="https://rsvp.withgoogle.com/events/indies-games-accelerator-2024/" target="_blank"><b>Google Play’s Indie Games Accelerator</b></a> class of 2024.</p> <p>Selected game studios from around the world will take part in the 10-week accelerator designed to take their businesses to the next level on Google Play. The program includes:</p> <ul><ul> <li>A series of online masterclasses, talks and gaming workshops hosted by industry leaders</li> <li>Mentorship sessions covering a broad variety of topics including technical development, gameplay and team leadership</li> <li>Access to gaming experts from Google and leading studios</li> </ul></ul> <p>Due to the number of impressive applications, we’ve doubled this year’s class size from 30 to 60 studios. Without further ado, meet the class of 2024 and join us in congratulating them!</p> <image><div style="text-align: center;"><img alt="moving image of IGA winners class 2024" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ5xdK7N85wZVDQ-wQ2QzCye-20Pm1ZgvSdozXqSrK9ivomMF_U2FYXfK1KlYti92ERBocG3IoWMIfzFUjhyx8SWgB9K-_WUyn_pfhmeGShT71CtP6R-uKnseQhyphenhyphenE5ukdDlzbAFK1_qtYDIDwuhLhpmBTofS5nMDJHgBBhAVYKreMpxfVGbSUI5PIpzXY/s1600/IGA-Inline-Square.gif" width="75%" /></div></image><br /> <table style="border-collapse: collapse; border: none;"><colgroup><col width="210"></col><col width="208"></col><col width="226"></col></colgroup><tbody><tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-color: rgb(0, 0, 0); border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-style: solid; border-top: solid #000000 1pt; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><span style="font-size: small;"><b>Americas </b><br /><br />Logisk Studio<br />Attu<br />Sprocket Games<br />Blu Studios <br />Highpoint Games<br />D20 Studios<br />Supernova Games<br />Cafund</span>o<span style="font-size: small;">&nbsp;Creative Studio<br />Hyperthought Games Inc.<br />North Star Digital Studios<br />Theia Studios<br />Aurecas Games<br />Mana Burn<br />67 Bits<br />Retora Games<br />Ocarina Studios<br />WonderLegend Games<br />EiP Game Studio</span></td> <td style="border-bottom: solid #000000 1pt; border-color: rgb(0, 0, 0); border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-style: solid; border-top: solid #000000 1pt; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><span style="font-size: small;"><b>Asia Pacific<br /></b><br />CLOVER-FI Games<br />Crimzen Red Studios<br />QueseraGames Co., Ltd.<br />Gonggamore Contents Inc.<br />ONDOT INC<br />LiberalDust<br />Studio Boxcat<br />Whoyaho Corp.<br />Blackhammer<br />Algorocks<br />Own Games&nbsp;<br />Kudos Games<br />Appspace Solutions<br />Lentera Nusantara<br />Dunali Games<br />Hexpion<br />Dreams Studio<br />Panthera Studio<br />Lunarite Studio<br />Npckc<br />ONDI Games<br />Playdew<br />Niku Games Studio<br />Avian Hearts Studios Pvt. Ltd<br />WASD Interactive<br /></span></td> <td style="border-bottom: solid #000000 1pt; border-color: rgb(0, 0, 0); border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-style: solid; border-top: solid #000000 1pt; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><span style="font-size: small;"><b>Europe, Middle East &amp; Africa<br /></b><br />First Pick Studios<br />Pank0<br />Big Loop Studios<br />BaldrickSoft<br />RPG games<br />Airapport<br />Post Physical<br />WALKME MOBILE SOLUTIONS<br />Iteration One<br />Veryo Studios<br />Monster League<br />TERAHYPE<br />3Hills<br/>Gravity Code<br />Torpor Games<br />Nordic Stone Studio<br />TruePlayers<br />Pineapple on Pizza Studios<br /></span></td></tr></tbody></table> <p>Congratulations again to all the founders selected; we can’t wait to see your games grow on our platform.</p> <p> We’re committed to helping app and game businesses of all sizes reach their full potential. <a href="https://play.google.com/console/about/programs/indiegames/" target="_blank">Discover more</a> about Google Play’s programs, resources and tools for indie games developers.</p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-7944766371651747536 2024-03-11T12:00:00.000-07:00 2024-03-11T12:00:00.136-07:00 Enhanced screen sharing capabilities in Android 14 (and Google Meet) improve meeting productivity <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_sdASOx_frDm-yazYXC4aKeqWikdYk2buvvFtHk6HO7wg1QuLjkIuo9DDQKuPJ1e1TlHYNGK9znxZgPd8CSLzB-7oYQHsbz4BUOdzB332l1CSKgVX9yho-S3hm8z0FUUb-K08P8DHXaI1sz59udOPgIun_HUpUOfKFIKtBkeqAwxEkRhJX3yTqhtBCgc/s1600/Android-13-Desktop-AVD-Social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_sdASOx_frDm-yazYXC4aKeqWikdYk2buvvFtHk6HO7wg1QuLjkIuo9DDQKuPJ1e1TlHYNGK9znxZgPd8CSLzB-7oYQHsbz4BUOdzB332l1CSKgVX9yho-S3hm8z0FUUb-K08P8DHXaI1sz59udOPgIun_HUpUOfKFIKtBkeqAwxEkRhJX3yTqhtBCgc/s1600/Android-13-Desktop-AVD-Social.png" style="display: none;" /> <em>Posted by Francesco Romano ? Developer Relations Engineer on Android</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxlVH6A7vyTdl1iUORCTBBC5Z2_5P-Up_WplvQ8OUjgib3yG3yyGWX8kEcAhC1Rzfr5ym4yWrCrQiT5wUGFqG7HCvub8ix0a1np7sYR8ePr_dLaXCo1GrIrE_KAjl3ACBTRodEemNwHqRDEZKPTNIGkJkXi3ECBfyFn6FPCytQ_1GzSPQ6j676JEoKWOE/s1600/Android-13-Desktop-AVD-Header.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxlVH6A7vyTdl1iUORCTBBC5Z2_5P-Up_WplvQ8OUjgib3yG3yyGWX8kEcAhC1Rzfr5ym4yWrCrQiT5wUGFqG7HCvub8ix0a1np7sYR8ePr_dLaXCo1GrIrE_KAjl3ACBTRodEemNwHqRDEZKPTNIGkJkXi3ECBfyFn6FPCytQ_1GzSPQ6j676JEoKWOE/s1600/Android-13-Desktop-AVD-Header.png" /></a> <h2 style="text-align: left;"><span style="font-size: x-large;">App screen sharing improves privacy and productivity</span></h2> <p>Android 14 QPR2 brings exciting advancements in user privacy and streamlined multitasking with app screen sharing. No longer do users have to broadcast their entire screen while screen sharing or casting, ensuring they share exactly what they want to share.</p> <p>Leverage the new <a href="https://developer.android.com/reference/kotlin/android/media/projection/MediaProjection" target="_blank">MediaProjection APIs</a> to customize the screen sharing experience and deliver even greater utility to your users.</p> <h3 style="text-align: left;"><span style="font-size: large;">What is app screen sharing?</span></h3> <p>Prior to Android 14, users could only share or record their entire screen on Android devices, which could expose private information in other apps or notifications.</p> <p>App screen sharing is a new platform feature that lets users restrict sharing and recording to a single app window, mitigating the risk of oversharing private messages or notifications. With app screen sharing, the status bar, navigation bar, notifications, and other system UI elements are excluded from the shared display. Only the content of the selected app is shared.</p> <p>This not only enhances security for screen sharing, but also enables new use cases on large screens. Users can improve multitasking productivity ? such as screen sharing while attending a meeting ? by taking advantage of extra screen space on these larger devices.</p> <h3 style="text-align: left;"><span style="font-size: large;">How does it work?</span></h3> <p>There are three different entry points for users to start app screen sharing:</p> <ul style="text-align: left;"><ol> <li>Start casting from Quick Settings</li> <li>Start screen recording from Quick Settings</li> <li>Launch from an app with screen sharing or recording capabilities via the MediaProjection API</li> </ol></ul> <p>Let’s consider an example where a host user wants to share a single app to the participants of a video call.</p> <p>The host user starts screen sharing as usual, but now in Android 14 they are presented with an updated dialog that allows them to choose whether to share a single app instead of their entire screen.</p> <p>The host user decides to share a single app, and they select the app from the App Selector.</p> <p>During screen sharing, the video call participants can see only the content from the selected app.</p> <p>The host user can end the screen capture in a few ways: from the app where sharing started, in the notification shade, by closing the app being shared, or by ending the video call.</p> <image><div style="text-align: center;"><img alt="visual journey of host sharing a single app to the participants in a video call across four panels" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyFA8txeUeB4A3r51f5Iv1uf9fIpbiQHODGbtwWEo1Jlcj1mTwOGGv5kcpFcypBCiLeepwmPMiod-sF5f_b9j6oa-iRwNIRgl9EuNv_4gDoCWnum_h4VqokCrxmIqW5bJrB9I4lGFCc0P8Fo7ot_-jL_Z5NHhi7BGXv3_DDJcd-y6CtoK3P0NKSyXXMH4/s1600/App-screen-sharing-inline.png" width="auto" /></div></image> <h3 style="text-align: left;"><span style="font-size: large;">How to support app screen sharing?</span></h3> <p>Apps that use the <a href="https://developer.android.com/reference/kotlin/android/media/projection/MediaProjection?_gl=1*192c0v6*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDAyMC4wLjAuMA.." target="_blank">MediaProjection APIs</a> are capable of starting app screen sharing <b>without any code changes</b>. However, it’s important to test your app to ensure that the screen sharing experience works as intended, since the user flow changes with this new behavior. Previously, the user would stay in the host app after the permission dialog. With app screen sharing the user is not returned to the host app, but the target app to be shared is launched instead. If the target app was already running in foreground (e.g. in multi window mode), then it simply becomes the top focused app.</p> <p>Android 14 also introduces two callback methods to empower you to customize the sharing experience:</p> <p><span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/media/projection/MediaProjection.Callback?_gl=1*1dwltys*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDAyMC4wLjAuMA..#oncapturedcontentresize" target="_blank">MediaProjection.Callback#onCapturedContentResize(width, height)</a></span> is invoked immediately after capture begins or when the size of the captured region changes. The method arguments provide the accurate sizing for the streamed capture.</p> <p><b>Note:</b> The given width and height correspond to the same width and height that would be returned from <span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/view/WindowMetrics.html?_gl=1*fzz62x*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDE4OS4wLjAuMA..#getBounds%28%29" target="_blank">android.view.WindowMetrics#getBounds()</a></span> of the captured region.</p> <p>If the recorded content has a different aspect ratio from either the <span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/hardware/display/VirtualDisplay.html?_gl=1*fzz62x*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDE4OS4wLjAuMA.." target="_blank">VirtualDisplay</a></span> or output <span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/view/Surface.html?_gl=1*fzz62x*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDE4OS4wLjAuMA.." target="_blank">Surface</a></span>, the captured stream has black bars around the recorded content. The application can avoid the black bars around the recorded content by updating the size of both the <span style="color: #0d904f; font-family: Courier;">VirtualDisplay</span> and output <span style="color: #0d904f; font-family: Courier;">Surface</span>:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="color: green; font-weight: bold;">override</span> <span style="color: green; font-weight: bold;">fun</span> <span style="color: blue;">onCapturedContentResize</span>(width: Int, height: Int): String { <span style="color: #408080; font-style: italic;">// VirtualDisplay instance from MediaProjection#createVirtualDisplay().</span> virtualDisplay.resize(width, height, dpi) <span style="color: #408080; font-style: italic;">// Create a new Surface with the updated size.</span> <span style="color: green; font-weight: bold;">val</span> textureName: Int <span style="color: #408080; font-style: italic;">// the OpenGL texture object name</span> <span style="color: green; font-weight: bold;">val</span> surfaceTexture = SurfaceTexture(textureName) surfaceTexture.setDefaultBufferSize(width, height) <span style="color: green; font-weight: bold;">val</span> surface = Surface(surfaceTexture) <span style="color: #408080; font-style: italic;">// Ensure the VirtualDisplay has the updated Surface to send the capture to.</span> virtualDisplay.setSurface(surface) } </pre></div> <p>The other API is <span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/media/projection/MediaProjection.Callback?_gl=1*1rggbp6*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDAyMC4wLjAuMA..#oncapturedcontentvisibilitychanged" target="_blank">MediaProjection.Callback#onCapturedContentVisibilityChanged(isVisible)</a></span>, which is invoked after capture begins or when the visibility of the captured region changes. The method argument indicates the current visibility of the captured region.</p> <p>The callback is triggered when:</p> <ul><ul> <li>The captured region becomes invisible <span style="color: #0d904f; font-family: Courier;">(isVisible==False)</span>.This may happen when the projected app is not topmost anymore, like when another app entirely covers it, or the user navigates away from the captured app.</li> <li>The captured region becomes visible again <span style="color: #0d904f; font-family: Courier;">(isVisible==True)</span>.This may happen if the user moves the covering app to show at least some portion of the captured app (for example, the user has multiple apps visible in multi-window mode).</li> </ul></ul> <p>Applications can take advantage of this callback by showing or hiding the captured content from the output <span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/view/Surface.html" target="_blank">Surface</a></span> based on whether the captured region is currently visible to the user. You should pause or resume the sharing accordingly in order to conserve resources.</p> <h3 style="text-align: left;"><span style="font-size: large;">How Google Meet is improving meeting productivity</span></h3> <blockquote><span style="font-size: large;"><i>“App screen sharing enables users to share specific information in a Meet call without oversharing private information on the screen like messages and notifications. Users can choose specific apps to share, or they can share the whole screen as before. Additionally, users can leverage split-screen mode on large screen devices to share content while still seeing the faces of friends, families, coworkers, and other meeting participants.”&nbsp;</i></span><b>- Product Manager at Google Meet</b></blockquote> <p>Let’s see app screen sharing in action during a video call, in this coming-soon version of Google Meet!</p> <image><div style="text-align: center;"><img alt="moving image of app screen sharing in action during a video call on Google Meet" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0_voCiK0Puj-DzOezfUac_cI7SZ8oiRMm-0y4UKRrfvNr3iyPk-4u6DK8hXpPykOiPZp3idl73ky7zztsh3v_XvH9qRLg-mFTNPWe1xTUq2cjyb3da0J0j4NMuuVJQP0iQFJv6J0TTYuRZdCb7o06PLmCAajZ940i2sgMOQ7IIYH-edRHtzjfw1PDJuQ/s1600/image1.gif" width="auto" /></div></image> <h3 style="text-align: left;"><span style="font-size: large;">Window on the world</span></h3> <p>App screen sharing opens doors (and windows) for more focused and secure app experiences within the Android ecosystem.</p> <p>This new feature enhances several use cases:</p> <ul><ul> <li><b>Collaboration apps</b> can facilitate focused discussion on specific design elements, documents, or spreadsheets without including distracting background details.</li> <li><b>Tech support</b> agents can remotely view the user's problem app without seeing potentially sensitive content in other areas.</li> <li><b>Video conferencing tools</b> can share a presentation window selectively rather than the entire screen.</li> <li><b>Educational apps</b> can demonstrate functionality without compromising student privacy, and students can share projects without fear of showing sensitive information.</li> </ul></ul> <p>By thoughtfully implementing app screen sharing, you can establish your app as a champion of user privacy and convenience.</p> <p></p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-3732292705222856718 2024-03-08T01:00:00.000-08:00 2024-03-12T07:28:09.066-07:00 Better, faster, stronger time zone updates on Android <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9JvUThxwLTM03JTYkygOtTnzlsM6PwlsfpEHPLOp-LuGv4XwVAR4UUBSgDXazrj482_FDb10KiBARaZJZa36pPnMpitYYl8AABqq8pAPxEVNSQZs1G-hkyBxp25fSll_ZxrNCt1HZioP2kwJX-adozbdZ8dkUoML7KLhJB8bUy1QNI6yE2GzGsqtqQ6A/s1600/social-Better,-faster,-stronger-timezone-updates-on-Android.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9JvUThxwLTM03JTYkygOtTnzlsM6PwlsfpEHPLOp-LuGv4XwVAR4UUBSgDXazrj482_FDb10KiBARaZJZa36pPnMpitYYl8AABqq8pAPxEVNSQZs1G-hkyBxp25fSll_ZxrNCt1HZioP2kwJX-adozbdZ8dkUoML7KLhJB8bUy1QNI6yE2GzGsqtqQ6A/s1600/social-Better,-faster,-stronger-timezone-updates-on-Android.png" style="display: none;" /> <em>Posted by Almaz Mingaleev ? Software Engineer and Masha Khokhlova ? Technical Program Manager</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu_XZWUxUGTyu6vmO0ul45K8wOtANb_tMiy3yZGUcNrFydI7sAgJ8FneIcrHYqhm8I5MRNpHjIKIy-53GoJi4F4_-shBDcfqP6XQy3w5TC6PL9pNXA2iPV-It4q32PzaN68xmOyQrnbE4BeBp60vubra0PQIX6EB8oCiXsLl53tcsAwyfICzYxqTggZQw/s1600/header-Better,faster,-stronger-timezone-updates-on-Android.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu_XZWUxUGTyu6vmO0ul45K8wOtANb_tMiy3yZGUcNrFydI7sAgJ8FneIcrHYqhm8I5MRNpHjIKIy-53GoJi4F4_-shBDcfqP6XQy3w5TC6PL9pNXA2iPV-It4q32PzaN68xmOyQrnbE4BeBp60vubra0PQIX6EB8oCiXsLl53tcsAwyfICzYxqTggZQw/s1600/header-Better,faster,-stronger-timezone-updates-on-Android.png" /></a> <p>It's that time of year again when many of us move our clocks! Oh wait, your Android devices did it automatically, didn’t they? For Android users living in many countries, this may not be surprising. For example, the US, EU and UK governments haven't changed their time legislation in a while<sup>*</sup>, so users wake up every morning to see the correct time.</p> <p>But, what happens when time laws change? If you look globally, governments can and do change their time laws, sometimes every year, and Android devices have to keep up to support our global user base. </p> <p>To implement a region’s time legislation, Android devices have to follow a set of encoded rules. What are these rules? Let’s start with why rules are needed in the first place. Clearly, 7am in Los Angeles and 7am in London are not the same time. Moreover, if you are in London and want to know the time in Los Angeles, you have to know how many hours to subtract, and this is not fixed throughout the year<sup>**</sup>. So to tell local time (time your watches should show) it is convenient to have a reference clock that everybody on the planet agrees on. This clock is named <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Timehttps://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, coordinated universal time. Local time in London during winter matches UTC, during summer it is calculated by adding one hour to UTC, usually referred to as UTC+1. For Los Angeles local time during summer is UTC-8 (8 hours behind, UTC offset is -8 hours) and during winter it is UTC-7 correspondingly. When a region changes from one offset to another, we call that a “transition”. Combination of these offsets and rules when a transition happens (such as “last Sunday of March” or “first Sunday on or after 8th March”) defines a time zone. For some countries, the time zone rules can be very simple and primarily determined by their chosen UTC offset: “no transitions, we don’t move our clocks forwards and backwards”.</p> <p>Governments can decide to change the UTC offset for regions, introduce new time zone regions, or alter the day that daylight saving transitions occur. When governments do this, the time zone rules on every Android device needs to be updated, otherwise the Android device will continue to follow the old rules, which can lead to an incorrect local time being shown to users in the affected areas.</p> <p>Android is not alone in needing to keep track of this information. Fortunately, there is a database supported by IANA (<a href="https://www.iana.org/time-zones" target="_blank">Internet Assigned Numbers Authority</a>) and maintained by a small group of volunteers known as the TZDB (Time Zone Database) which is used as a basis for local timekeeping on most modern operating systems. The TZDB contains most of the information that Android needs.</p> <p>There is no schedule, but typically the TZDB releases a new update 4-5 times a year. The Android team wants to release updates that affect its devices as soon as possible.</p> <p>How do these changes reach your devices?</p> <ul> <div style="text-align: left;">1.<span>&nbsp;&nbsp; &nbsp;</span>Government signs a law / decree.</div><div style="text-align: left;"><br /></div> <div style="text-align: left;">2.<span>&nbsp;&nbsp; &nbsp;</span>Someone lets IANA know about these changes</div><div style="text-align: left;"><br /></div> <div style="text-align: left;">3.<span>&nbsp;&nbsp; &nbsp;</span>Depending on how much lead time was given and changes announced by other countries IANA publishes a new TZDB release.</div><div style="text-align: left;"><br /></div> <div style="text-align: left;">4.<span>&nbsp;&nbsp; &nbsp;</span>The Android team incorporates the TZDB release (along with a small amount additional information we obtain from related projects and derive ourselves) into our codebase.</div><div style="text-align: left;"><br /></div> <div style="text-align: left;">5.<span>&nbsp;&nbsp; &nbsp;</span>We roll-out these updates to your devices. How the roll-out happens depends on the type and age of the Android device.</div><div style="text-align: left;"><br /></div> <ul><ul><div>a.<span>&nbsp;&nbsp; &nbsp;</span>Many mobile Android devices are covered by Google’s Project <a href="https://source.android.com/docs/core/ota/modular-system" target="_blank">Mainline</a>, which means that Google sends updates to devices directly.</div><div><br /></div></ul></ul> <ul><ul><div>b.<span>&nbsp;&nbsp; &nbsp;</span>Some devices are handled by the device’s manufacturer who takes the Android team’s source code updates and releases them to devices themselves according to their own update schedule.</div></ul></ul></ul> <p>As you can see, there are quite a few steps. Applying, testing and releasing an update can take weeks. And it is not just Android and other computer operating systems like it who need to take action. There are usually telecoms, banks, airlines and software companies that have to make adjustments to their own systems and time tables. Citizens of a country need to be made aware of changes so they know what to expect, especially if they are using older devices that might not receive necessary updates. And it all takes time and can cause problems for countless people if it isn’t handled well. The amount of disruption caused by a change is usually determined by the clarity of the legislation and notice period that governments provide. The TZDB volunteers are good at spotting changes, but it helps if the governments notify IANA directly, especially when it’s not clear the exact regions or existing laws affected. Unfortunately, many of the recent time zone changes were given with about a month or less notice time. Android has a set of <a href="https://source.android.com/docs/core/connect/time/time-zone-policy-recommendations" target="_blank">recommendations</a> for how much notice to provide. Other operating systems have similar recommendations.</p> <p>Android is constantly evolving. One of such improvements, Project Mainline, <a href="https://android-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html" target="_blank">introduced</a> in Android 10, has made a big difference in how we update important parts of the Android operating system. It allows us to deliver select AOSP components directly through Google Play, making updates faster than a full OTA update and reducing duplication of efforts done by each OEM.</p> <p>From the beginning, time zone rules were a component in Mainline, called <a href="https://source.android.com/docs/core/ota/modular-system/timezone" target="_blank">Time Zone Data or tzdata module</a>. This integration allowed us to react more quickly to government-mandated time zone changes than before. However until 2023 tzdata updates were still bundled with other Mainline changes, sometimes leading to testing complexities and slower deployment.</p> <p>In 2023, we made further investments in Mainline's infrastructure and decoupled the tzdata module from the other components. With this isolation, we gained the ability to respond rapidly to time zone legislation changes ? often releasing updates to Android users outside of the established release cadence. Additionally, this change means time zone updates can reach a far greater number of Android devices, ensuring you as Android users always see the correct time.</p> <p>So while your Android phone may not be able to restore that lost hour of sleep, you can rest assured that it will show the accurate time, thanks to volunteers and the Android team.</p> <p>Curious about the ever-changing world of time zones? Explore the <a href="https://data.iana.org/time-zones/tz-link.html" target="_blank">IANA Time Zone Database</a> and learn more about how <a href="https://source.android.com/docs/core/connect/time" target="_blank">time and time zones are managed</a> on Android.</p><br /> <p><small><em><sup>*</sup>In 2018-2019 there were changes in Alaska. This is a blogpost, not a technical documentation!</em></small></p> <p><small><em><sup>**</sup>Because the US and UK apply their daylight saving changes at different local times and on different days of the year.</em></small></p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-6347823218731192012 2024-03-07T14:00:00.000-08:00 2024-03-07T14:00:00.236-08:00 Introducing the Fused Orientation Provider API: Consistent device orientation for all <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivlmOIXvZ0LXZ7s7UJSt2VDp1CTLp0uzvJE-6x3OFM7RD56fK17QakAcXpCpPYwf7uGvps_vafNFohnc4Lo0XQXmzNY7XpiEyhltnMz6mR3cgg8EjZmSBv-rYiPaw3AxwbpCY5SsVD7_G1kzo6ZxZVq6dtszshGnp1Bd1X-EmWDg5Wy1NYPrKd7p7tN6I/s1600/social-Introducing-the-Fused-Orientation-Provider-API--Consistent-device-orientation-for-all-.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivlmOIXvZ0LXZ7s7UJSt2VDp1CTLp0uzvJE-6x3OFM7RD56fK17QakAcXpCpPYwf7uGvps_vafNFohnc4Lo0XQXmzNY7XpiEyhltnMz6mR3cgg8EjZmSBv-rYiPaw3AxwbpCY5SsVD7_G1kzo6ZxZVq6dtszshGnp1Bd1X-EmWDg5Wy1NYPrKd7p7tN6I/s1600/social-Introducing-the-Fused-Orientation-Provider-API--Consistent-device-orientation-for-all-.png" style="display: none;" /> <em>Posted by Geoffrey Boullanger ? Senior Software Engineer, Shandor Dektor ? Sensors Algorithms Engineer, Martin Frassl and Benjamin Joseph ? Technical Leads and Managers</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp8dFtNlqMsgK3ffDx0qB8ZflPr8veMx-8cyMDDW7rk453Sn7KLo-j63a5s22_hgKl5K9lnhFnxq1YVMYg7TFaLy7-WsobcOlAvoy3mtFpn34H-GuurME8i_A-HS4gNgjzcb1BeGcMyBO0UXeoG5m8ahfWjwv07qSoWsG3sdt-Fw2mXbv7ZHGXtWuzNEc/s1600/header-Introducing-the-Fused-Orientation-Provider-API--Consistent-device-orientation-for-all-.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp8dFtNlqMsgK3ffDx0qB8ZflPr8veMx-8cyMDDW7rk453Sn7KLo-j63a5s22_hgKl5K9lnhFnxq1YVMYg7TFaLy7-WsobcOlAvoy3mtFpn34H-GuurME8i_A-HS4gNgjzcb1BeGcMyBO0UXeoG5m8ahfWjwv07qSoWsG3sdt-Fw2mXbv7ZHGXtWuzNEc/s1600/header-Introducing-the-Fused-Orientation-Provider-API--Consistent-device-orientation-for-all-.png" /></a> <p>Device orientation, or attitude, is used as an input signal for many use cases: virtual or augmented reality, gesture detection, or compass and navigation ? any time the app needs the orientation of a device in relation to its surroundings. We’ve heard from developers that orientation is challenging to get right, with frequent user complaints when orientation is incorrect. A maps app should show the correct direction to walk towards when a user is navigating to an exciting restaurant in a foreign city!</p> <p>The Fused Orientation Provider (FOP) is a new API in Google Play services that provides quality and consistent device orientation by fusing signals from accelerometer, gyroscope and magnetometer.</p> <p>Although currently the Android Rotation Vector already provides device orientation (and will continue to do so), the new FOP provides more consistent behavior and high performance across devices. We designed the FOP API to be similar to the Rotation Vector to make the transition as easy as possible for developers.</p> <p>In particular, the Fused Orientation Provider</p> <ul style="text-align: left;"><ul> <li>Provides a unified implementation across devices: an API in Google Play services means that there is no implementation variance across different manufacturers. Algorithm updates can be rolled out quickly and independent of Android platform updates;</li></ul></ul><ul style="text-align: left;"><ul> <li>Directly incorporates local magnetic declination, if available;</li></ul></ul><ul style="text-align: left;"><ul> <li>Compensates for lower quality sensors and OEM implementations (e.g., gyro bias, sensor timing).</li> </ul></ul> <p>In certain cases, the FOP returns values piped through from the AOSP Rotation Vector, adapted to incorporate magnetic declination.</p> <h3>How to use the FOP API</h3> <p>Device orientation updates can be requested by creating and sending a DeviceOrientationRequest object, which defines some specifics of the request like the update period.</p> <p>The FOP then outputs a stream of the device’s orientation estimates as quaternions. The orientation is referenced to <b>geographic</b> north. In cases where the local magnetic declination is not known (e.g., location is not available), the orientation will be relative to <b>magnetic</b> north.</p> <p>In addition, the FOP provides the device’s heading and accuracy, which are derived from the orientation estimate. This is the same heading that is shown in Google Maps, which uses the FOP as well. We recently added changes to better cope with magnetic disturbances, to improve the reliability of the cone for Google Maps and FOP clients.</p> <p>The update rate can be set by requesting a specific update period. The FOP does not guarantee a minimum or maximum update rate. For example, the update rate can be faster than requested if another app has a faster parallel request, or it can be slower as requested if the device doesn’t support the high rate.</p> <p>For full specification of the API, please consult the API documentation:</p> <ul><ul> <li>Register for updates: <a href="https://developers.google.com/android/reference/com/google/android/gms/location/FusedOrientationProviderClient#public-abstract-taskvoid-requestorientationupdates-deviceorientationrequest-request,-executor-executor,-deviceorientationlistener-listener" target="_blank"><span style="font-family: courier;">requestOrientationUpdates(...)</span></a> </li> <li>Data is returned as <a href="https://developers.google.com/android/reference/com/google/android/gms/location/DeviceOrientation" target="_blank"><span style="font-family: courier;">DeviceOrientation</span></a> </li> </ul></ul> <h3>Example usage (Kotlin)</h3> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;"><span style="color: green; font-weight: bold;">package</span> <span style="color: blue; font-weight: bold;">...</span> import android.content.Context import com.google.android.gms.location.DeviceOrientation import com.google.android.gms.location.DeviceOrientationListener import com.google.android.gms.location.DeviceOrientationRequest import com.google.android.gms.location.FusedOrientationProviderClient import com.google.android.gms.location.LocationServices import com.google.common.flogger.FluentLogger import java.util.concurrent.Executors <span style="color: green; font-weight: bold;">class</span> <span style="color: blue;">Example</span>(context: Context) { <span style="color: green; font-weight: bold;">private</span> <span style="color: green; font-weight: bold;">val</span> logger: FluentLogger = FluentLogger.forEnclosingClass() <span style="color: #408080; font-style: italic;">// Get the FOP API client</span> <span style="color: green; font-weight: bold;">private</span> <span style="color: green; font-weight: bold;">val</span> fusedOrientationProviderClient: FusedOrientationProviderClient = LocationServices.getFusedOrientationProviderClient(context) <span style="color: #408080; font-style: italic;">// Create an FOP listener</span> <span style="color: green; font-weight: bold;">private</span> <span style="color: green; font-weight: bold;">val</span> listener: DeviceOrientationListener = DeviceOrientationListener { orientation: DeviceOrientation -&gt; <span style="color: #408080; font-style: italic;">// Use the orientation object returned by the FOP, e.g.</span> logger.atFinest().log(<span style="color: #ba2121;">"Device Orientation: %s deg"</span>, orientation.headingDegrees) } <span style="color: green; font-weight: bold;">fun</span> <span style="color: blue;">start</span>() { <span style="color: #408080; font-style: italic;">// Create an FOP request</span> <span style="color: green; font-weight: bold;">val</span> request = DeviceOrientationRequest.Builder(DeviceOrientationRequest.OUTPUT_PERIOD_DEFAULT).build() <span style="color: #408080; font-style: italic;">// Create (or re-use) an Executor or Looper, e.g.</span> <span style="color: green; font-weight: bold;">val</span> executor = Executors.newSingleThreadExecutor() <span style="color: #408080; font-style: italic;">// Register the request and listener</span> fusedOrientationProviderClient .requestOrientationUpdates(request, executor, listener) .addOnSuccessListener { logger.atInfo().log(<span style="color: #ba2121;">"FOP: Registration Success"</span>) } .addOnFailureListener { e: Exception? -&gt; logger.atSevere().withCause(e).log(<span style="color: #ba2121;">"FOP: Registration Failure"</span>) } } <span style="color: green; font-weight: bold;">fun</span> <span style="color: blue;">stop</span>() { <span style="color: #408080; font-style: italic;">// Unregister the listener</span> fusedOrientationProviderClient.removeOrientationUpdates(listener) } }</span> </pre></div> <h3>Technical background</h3> <p>The Android ecosystem has a wide variety of system implementations for sensors. Devices should meet the criteria in the <a href="https://source.android.com/docs/compatibility/cdd" target="_blank">Android compatibility definition document (CDD)</a> and must have an accelerometer, gyroscope, and magnetometer available to use the fused orientation provider. It is preferable that the device vendor implements the high fidelity sensor portion of the CDD.</p> <p>Even though Android devices adhere to the Android CDD, recommended sensor specifications are not tight enough to fully prevent orientation inaccuracies. Examples of this include magnetometer interference from internal sources, and delayed, inaccurate or nonuniform sensor sampling. Furthermore, the environment around the device usually includes materials that distort the geomagnetic field, and user behavior can vary widely. To deal with this, the FOP performs a number of tasks in order to provide a robust and accurate orientation:</p> <ol><ul> <li>Synchronize sensors running on different clocks and delays;</li> <li>Compensate for the hard iron offset (magnetometer bias);</li> <li>Fuse accelerometer, gyroscope, and magnetometer measurements to determine the orientation of the device in the world;</li> <li>Compensate for gyro drift (gyro bias) while moving;</li> <li>Produce a realistic estimate of the compass heading accuracy.</li> </ul></ol> <p>We have validated our algorithms on comprehensive test data to provide a high quality result on a wide variety of devices.</p> <h3>Availability and limitations</h3> <p>The Fused Orientation Provider is available on all devices running Google Play services on Android 5 (Lollipop) and above. Developers need to add the dependency <span style="color: #0d904f; font-family: Courier;">play-services-location:21.2.0</span> (or above) to access the new API.</p> <p><b>Permissions</b></p> <p>No permissions are required to use the FOP API. The output rate is limited to 200Hz on devices running API level 31 (Android S) or higher, unless the <span style="color: #0d904f; font-family: Courier;">android.permissions.HIGH_SAMPLING_RATE_SENSORS</span> permission was added to your Manifest.xml.</p> <p><b>Power consideration</b></p> <p>Always request the longest update period (lowest frequency) that is sufficient for your use case. While more frequent FOP updates can be required for high precision tasks (for example Augmented Reality), it comes with a power cost. If you do not know which update period to use, we recommend starting with <span style="color: #0d904f; font-family: Courier;">DeviceOrientationRequest::OUTPUT_PERIOD_DEFAULT</span> as it fits most client needs.</p> <p><b>Foreground behavior</b></p> <p>FOP updates are only available to apps running in the foreground.</p><br /> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;">Copyright <span style="color: #666666;">2023</span> Google LLC<span style="color: #666666;">.</span> SPDX<span style="color: #666666;">-</span>License<span style="color: #666666;">-</span>Identifier<span style="color: #666666;">:</span> Apache<span style="color: #666666;">-2.0</span> </pre></div> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-5590447198835936527 2024-03-07T10:00:00.000-08:00 2024-03-07T12:52:38.965-08:00 #TheAndroidShow: the latest from MWC, Gemini Nano, Android 15 and more! <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzCfvtscYp-s6T4XFATx4pLgXixHBYITpSFBtZOFlWhbMT-x_Qf8EN_rGmlp_2Da68eufEQGt5yiRDFbq3YovBKZqVRS70Q9KegA1TzDJPAFwWdlcKIxQJPR6fxL0Hx3SPN6oqnVrZEq_WlMFqXBcp2khwgtvo7spv2y-9WhF38fBrwan4PPorToZ-W4g/s1600/Image_20240306_143230.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzCfvtscYp-s6T4XFATx4pLgXixHBYITpSFBtZOFlWhbMT-x_Qf8EN_rGmlp_2Da68eufEQGt5yiRDFbq3YovBKZqVRS70Q9KegA1TzDJPAFwWdlcKIxQJPR6fxL0Hx3SPN6oqnVrZEq_WlMFqXBcp2khwgtvo7spv2y-9WhF38fBrwan4PPorToZ-W4g/s1600/Image_20240306_143230.png" style="display: none;" /> <em>Posted by Anirudh Dewani, Director of Android Developer Relations</em> <p><br /></p><p>Last week, Android device makers released a slew of new devices, and today we’re unpacking what that means for developers, as well as the latest in Gemini Nano, Android 15, Jetpack Compose and more, in another episode of our quarterly show, <a href="https://d.android.com/events/show" target="_blank">#TheAndroidShow</a>:</p> <iframe allowfullscreen="" class="BLOG_video_class" height="415" src="https://www.youtube.com/embed/pou4o1X1DI4" width="100%" youtube-src-id="pou4o1X1DI4"></iframe> <h2>The lastest wearables and foldables ? get building!</h2> <p>Android device makers unveiled their latest wearables and foldables last week at Mobile World Congress, and we were on the ground in Barcelona taking a look at those new devices and how you can get started building on top of them. A few of our favorites:</p> <ul style="text-align: left;"><ul> <li><b>OnePlus Watch 2</b>, powered with the latest version of Wear OS (<a href="https://android-developers.googleblog.com/2023/10/wear-os-4-is-now-stable-and-available-on-google-pixel-watch-2.html" target="_blank">Wear OS 4</a>). This device capitalizes on the updates we’ve made to the <a href="https://wearos.google.com/" target="_blank">Wear OS by Google</a> user experience, specifically improving power and performance, <a href="https://android-developers.googleblog.com/2024/02/wear-os-hybrid-interface-boosting-power-and-performance.html" target="_blank">you can read more here.</a></li></ul></ul> <ul style="text-align: left;"><ul><li><b>Xiaomi Watch 2</b>,the <a href="https://www.mi.com/global/product/xiaomi-watch-2/" target="_blank">latest smart watch</a> from the Xiaomi team. This device is powered by Wear OS by Google and provides upgraded camera, fitness, and sleep experiences to allow users to get the most from their device.</li></ul></ul> <ul style="text-align: left;"><ul><li><b>PORSCHE DESIGN HONOR Magic V2 RSR</b>, the world’s <a href="https://www.hihonor.com/global/phones/honor-magic-v2-rsr-porsche-design/" target="_blank">thinnest inward foldable smartphone</a>. This is the latest foldable for Android and was designed with the user experience at the forefront, including human-centric eye comfort technology.</li> </ul></ul> <p>Compose is an amazing way to build apps for your users across form factors. <a href="https://developer.android.com/training/wearables/compose" target="_blank">Compose for Wear OS</a> and the upcoming <a href="https://medium.com/androiddevelopers/new-apis-for-adaptive-layouts-in-jetpack-compose-f27cace48bcd" target="_blank">adaptive layouts</a> for large screens help devs bring their apps to life with less code, powerful tools, and intuitive APIs. Check out the <a href="https://d.android.com/wear/gallery" target="_blank">Wear OS</a> and <a href="https://developer.android.com/large-screens/gallery" target="_blank">Large Screen galleries</a>, where you can find UX inspiration and design guidance tailored to your type of app.</p><br /> <iframe allowfullscreen="" class="BLOG_video_class" height="415" src="https://www.youtube.com/embed/BcGfpspxX2E" width="100%" youtube-src-id="BcGfpspxX2E"></iframe><br /> <p><br /></p> <h2 style="text-align: left;"><span style="font-size: x-large;">Behind the scenes, with Gemini Nano and AICore</span></h2> <p>With all of the excitement around generative AI, it could be daunting to know where to start. So in today’s show, we’re taking you behind the scenes with <a href="https://android-developers.googleblog.com/2023/12/a-new-foundation-for-ai-on-android.html" target="_blank">Gemini Nano</a>, Google’s most efficient model built for on-device tasks, and <a href="http://d.android.com/ml/aicore" target="_blank">AICore</a>, Android’s system service for on-device foundation models. And we’re spotlighting how the team that builds the Recorder app used Gemini Nano to help summarize users’ voice memos on-device and with privacy in mind. And here’s the best part: the team built the feature in a short time with only a small number of engineers.</p><br /> <iframe allowfullscreen="" class="BLOG_video_class" height="415" src="https://www.youtube.com/embed/hHIMUgTuoXE" width="100%" youtube-src-id="hHIMUgTuoXE"></iframe><br /> <p><br /></p> <h2 style="text-align: left;"><span style="font-size: x-large;">Now in Android</span></h2> <p>We celebrated the 100th episode of Now in Android, covering the latest developer news, including:</p> <ul style="text-align: left;"><ul> <li><a href="http://android-developers.googleblog.com/2024/02/first-developer-preview-android15.html" target="_blank"><b>The Android 15 developer preview</b></a>, which includes updates to <a href="https://developer.android.com/design-for-safety/privacy-sandbox" target="_blank">Privacy Sandbox</a> and <a href="https://developer.android.com/health-and-fitness/guides/health-connect" target="_blank">Health Connect</a>, <a href="https://developer.android.com/reference/android/security/FileIntegrityManager" target="_blank">new file integrity protection APIs</a>, <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics" target="_blank">enhanced camera controls</a>, <a href="https://developer.android.com/reference/android/media/midi/MidiUmpDeviceService" target="_blank">virtual MIDI 2.0 devices</a>, an expanded <a href="https://developer.android.com/games/optimize/adpf" target="_blank">Android Dynamic Performance Framework</a>, and more.</li></ul></ul><ul style="text-align: left;"><ul> <li><a href="http://android-developers.googleblog.com/2024/02/android-studio-iguana-is-stable.html" target="_blank"><b>Android Studio Iguana</b></a>🦎which is now in stable and includes <a href="https://developer.android.com/studio/releases#compose-ui-check" target="_blank">Compose UI Check</a>, <a href="https://developer.android.com/studio/releases#compose-progressive-rendering" target="_blank">Progressive rendering in Compose Previews</a>, <a href="https://developer.android.com/studio/releases#aqi-vcs" target="_blank">Version Control System support in App Quality Insights</a>, <a href="https://developer.android.com/studio/releases#baseline-profiles-module-wizard" target="_blank">built-in support to create Baseline Profiles</a>, the <a href="https://developer.android.com/studio/releases#espresso-device-api" target="_blank">Espresso device API</a>, and more.</li></ul></ul><ul style="text-align: left;"><ul><li><b><a href="http://android-developers.googleblog.com/2024/02/cloud-photos-now-available-in-android-photo-picker.html" target="_blank">Cloud photos</a></b>, now available in the Android photo picker.</li></ul></ul><ul style="text-align: left;"><ul><li><b><a href="https://developers.google.com/ml-kit/vision/doc-scanner" target="_blank">ML Kit Document Scanner API</a></b>, enabling you to easily integrate advanced document scanning capabilities in your apps.</li></ul></ul><ul style="text-align: left;"><ul><li><a href="http://android-developers.googleblog.com/2024/02/wear-os-hybrid-interface-boosting-power-and-performance.html" target="_blank">Wear OS Hybrid Interface</a>, <a href="https://medium.com/androiddevelopers/jetpack-compose-strong-skipping-mode-explained-cbdb2aa4b900?source=rss----95b274b437c2---4" target="_blank">Scrolling/Skipping/Shapes</a> in Compose, <a href="https://adbackstage.libsyn.com/episode-204-fanotations" target="_blank">Lint</a>, and more!</li> </ul></ul><br /> <iframe allowfullscreen="" class="BLOG_video_class" height="415" src="https://www.youtube.com/embed/tiNXsmbcKgA" width="100%" youtube-src-id="tiNXsmbcKgA"></iframe><br /> <p><br /></p> <p>And that’s a wrap on another episode of our quarterly show, #TheAndroidShow. But the conversation continues on YouTube, X and LinkedIn: tell us your favorite part, or what you’d like us to dive into next time on our quarterly episode. And before we sign off, you can watch the full playlist, with the latest in Android developer news, <a href="https://youtu.be/pou4o1X1DI4?list=PLWz5rJ2EKKc_sAwvxL-DjrIMOKT9NOh30" target="_blank">here</a>. </p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-343484894954591077 2024-03-06T09:30:00.000-08:00 2024-03-06T09:39:27.838-08:00 Designing your account deletion experience with users in mind <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhljLTe4e3m2lCTVHZukvwtt3N5A34tfp3uQ9kITH8m5EM-9FI-7752LR4HofGCVBUzc9aaTXmUEC_xrKJnNW1R4pzx9YCZMFxWDxF64PWv8Zg6Yai3XKNlDvRv_PjR8QE8gikqfChslevvcNF8SzPET1WNH-_thMq-svIuGSTQ5t_KrFoE-SUWok28Xhc/s1600/social-Account-Deletion-Case-Study-Blog.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhljLTe4e3m2lCTVHZukvwtt3N5A34tfp3uQ9kITH8m5EM-9FI-7752LR4HofGCVBUzc9aaTXmUEC_xrKJnNW1R4pzx9YCZMFxWDxF64PWv8Zg6Yai3XKNlDvRv_PjR8QE8gikqfChslevvcNF8SzPET1WNH-_thMq-svIuGSTQ5t_KrFoE-SUWok28Xhc/s1600/social-Account-Deletion-Case-Study-Blog.png" style="display: none;" /> <em>Posted by Tatiana van Maaren ? Global T&amp;S Partnerships Lead, Privacy &amp; Security, May Smith - Product Manager, and Anita Issagholyan ? Policy Lead</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg50WdOqNNKoMWD6WVzyUPnglOMkEDYqfzeToYuq8rKeYkm3AiqvYYgBC_gZbSKLImlxK8qyvp8tr5mMeK5Cfih1k6_uSTOmwXAczn8YkKzHWhAF8SVbkiv2m45JVHG2rDzIinPrGoyV7ujVT9Gze4sde0wVa_2-B8TvdCzPs3RRjKL5anNqxgJxRF5BcY/s1600/Play-Account-Deletion-Case-Study-Blog.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg50WdOqNNKoMWD6WVzyUPnglOMkEDYqfzeToYuq8rKeYkm3AiqvYYgBC_gZbSKLImlxK8qyvp8tr5mMeK5Cfih1k6_uSTOmwXAczn8YkKzHWhAF8SVbkiv2m45JVHG2rDzIinPrGoyV7ujVT9Gze4sde0wVa_2-B8TvdCzPs3RRjKL5anNqxgJxRF5BcY/s1600/Play-Account-Deletion-Case-Study-Blog.png" /></a> <p>With millions of developers relying on our platform, Google Play is committed to keeping our ecosystem safe for everyone. That’s why, in addition to our ongoing investments in app privacy and security, we also continuously update our policies to respond to new challenges and user expectations.</p> <p>For example, we recently introduced a <a href="https://android-developers.googleblog.com/2023/04/giving-people-more-control-over-their-data.html" target="_blank">new account deletion policy</a> with required disclosures within the Data Safety section on the Play Store. Deleting an account should be as easy as creating one, so the new policy requires developers to provide information and web resources that help users to manage their data and understand an app's deletion practices. </p> <p>To help you build trust and design a user-friendly experience that helps meet our policy requirements, consider these <b>5 best practices</b> when implementing your account deletion solution.</p> <h3>1. &nbsp;&nbsp; &nbsp;Make it seamless</h3> <p>Users prefer a simple and straightforward account deletion flow. Although users know that more steps may follow (such as authentication) navigating multiple screens before the deletion page can be a significant barrier and create negative feelings for the user. Consider providing your account deletion option on an account settings page or place a prominent button on the home screen. Design the flow with discoverability in mind by taking the user directly to the deletion process.</p> <h3>2. &nbsp;&nbsp; &nbsp;Allow automatic deletion</h3> <p>Users feel that if they can create an account without talking to a customer service agent, they should be able to delete their account online, too. If automation is not on your roadmap just yet, consider a step-by-step deletion request form or a dedicated page to connect users with customer support.</p> <h3>3. &nbsp;&nbsp; &nbsp;Offer guidance and explain potential implications</h3> <p>Users delete their accounts for various reasons, some of which may be better resolved another way. Early in your deletion flow, point your users toward a Help Center article that explains how your deletion process works in simple terms, including any potential consequences. For example, make it clear if your users will need to pause their payment method before deleting the account, or download any account data they want to keep. Helping your users understand the process in advance can prevent accidental deletions. For those who do change their minds, consider offering a way to recover their accounts within a reasonable timeframe. </p> <p>Here’s an example of how Play Store Developer, Canva, has designed the in-app deletion flow to explain potential consequences of account deletion:</p> <image><div style="text-align: center;"><img alt="user journey on the Canva app in three panels" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSmgP5HlDbudibZxpVZwLrzDcBnt2rg_ITmTLc2t_OFMIDPyLBzQJxeBfmyyp_nk1OL0Yd-pkQKiPFUqH0WyUbcDloblVhUOv6HcW-I0iNeTOghSLQjcQnVyqEFBEpXjqT5zDcIJUFnrcAEyh_-8Y2HxwW3sRCsP4glQPy03pBG40xhwC6G9qOClzmugk/s1600/Account-Deletion-Google-Play-inline%20%281%29.png" width="100%" /></div><imgcaption><center><em>User journey on the Canva app </em></center></imgcaption></image> <blockquote><span style="font-size: large;"><i>“User data privacy has always been important for us. We’ve always been intentional about our approach in optimizing the Canva app so our users can have more transparency and control over their data. We’re welcoming these new requirements from the Play store as we know this new flow will elevate users’ trust in our app and benefit our business in the long term.”&nbsp;</i></span><b>- Will Currie, Software Engineer, Canva</b></blockquote> <h3>4. &nbsp;&nbsp; &nbsp;Confirm account deletion </h3> <p>Sometimes users misunderstand whether the account itself or just data collected by the app was deleted in the deletion process. Users often think that the data your app stored in the cloud will automatically be deleted at the same time as account deletion. Since it may take time to remove account data from internal company systems or comply with data retention requirements in different regions, transparency about the process can help you maintain trust in your brand and make it more likely for users to return in the future.</p> <p>Here’s SYBO Games, has designed their web deletion in-app deletion flow:</p> <image><div style="text-align: center;"><img alt="user journey on the Sybo Games web resource in four panels" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi59KSA_oGI24P30Um9abe7fLhiYoTWKn5q8oJ2lDsKScf30Jq6GyC_ZAWCfCAYfwiGRD4jdN4n5KCCXFH7L-zdCY7efdN96HhsuTmOFvQNUw5l75QoLBa43i_LPo5ph1-W64y3fTSKRXFMLIy8TeFWa-pY-qjpX-0j9Tg0mroJcxc56ZFAmRjH06kvKCE/s1600/Account-Deletion-Google-Play-inline-2.png" width="100%" /></div><imgcaption><center><em>User journey on the SYBO Games web resource </em></center></imgcaption></image> <blockquote><span style="font-size: large;"><i>“We are always striving to ensure that our games provide a fun user experience, built on a solid data protection foundation. When we learned about the new account deletion update on Google Play, we thought this was a great step forward to ensure that the entire developer ecosystem optimizes for user safety. We encourage developers to carve out time to embrace these improvements and prioritize regular privacy check-ins.” &nbsp;</i></span><b>- Elizabeth Ann Schweitzer, Games Compliance Manager, SYBO Games</b></blockquote> <h3>5. &nbsp;&nbsp; &nbsp;Don’t forget user engagement</h3> <p>This is a great opportunity to connect with your users at a critical moment. Make sure users who have uninstalled your app can easily remove their accounts through a web resource without needing to reinstall the app. You can also invite them to complete a survey or provide feedback on their decision.</p> <p>Protecting users' data is essential for building trust and loyalty. By updating the Data Safety section on Google Play and continuing to optimize user experience for account deletion, you can strengthen trust in your company while striving for the highest level of user data protection.</p><br /> <p>Thank you for your continued collaboration and feedback in developing this data transparency feature and in helping make Google Play safe for all.</p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-8403558132129934168 2024-03-05T09:00:00.000-08:00 2024-03-06T19:04:58.709-08:00 Introducing a new Text-To-Speech engine on Wear OS <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz59FlzcTBW59NOVhyLb_vZd-ePuN6w-TMUiMvxaZDiofpQHayKQn8sPLmP-bmuj5-6kPS7wHUOTqpzOTwoRqBRO1zdnLE3EuqPaH97Cw0ezGgLFKIbX0dzXfI4xx0bPa8XLl6FyvhYKs3XKBowHEz2ambpEB1H5UypEtPrn-dXMXkGlJEKu7NdjMV/s1600/Android%20-%20Policy%20Updates-%20Improving%20Wear%20App%20Quality-social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz59FlzcTBW59NOVhyLb_vZd-ePuN6w-TMUiMvxaZDiofpQHayKQn8sPLmP-bmuj5-6kPS7wHUOTqpzOTwoRqBRO1zdnLE3EuqPaH97Cw0ezGgLFKIbX0dzXfI4xx0bPa8XLl6FyvhYKs3XKBowHEz2ambpEB1H5UypEtPrn-dXMXkGlJEKu7NdjMV/s1600/Android%20-%20Policy%20Updates-%20Improving%20Wear%20App%20Quality-social.png" style="display: none;" /> <em>Posted by Ouiam Koubaa ? Product Manager and Yingzhe Li ? Software Engineer</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVviCwvyzix33x3GBKtuFuXHOivMjeQP5FrEX8df4khO7Y6KSKwdAqBIRmac1eN5T9EIMbwATiUxqjjnOoMZow-T458ZZadL0fpwy901_pNLayQ-wLUAm8w0W2OyNZk_6KAYPwHOLqKcu9bLnpoc8K-3RIQvNeRV11iSzBSL2U20bRnb89EXghEHBs/s1600/Android%20-%20Policy%20Updates-%20Improving%20Wear%20App%20Quality-header.png"><img border="0" data-original-height="800" data-original-width="1058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVviCwvyzix33x3GBKtuFuXHOivMjeQP5FrEX8df4khO7Y6KSKwdAqBIRmac1eN5T9EIMbwATiUxqjjnOoMZow-T458ZZadL0fpwy901_pNLayQ-wLUAm8w0W2OyNZk_6KAYPwHOLqKcu9bLnpoc8K-3RIQvNeRV11iSzBSL2U20bRnb89EXghEHBs/s1600/Android%20-%20Policy%20Updates-%20Improving%20Wear%20App%20Quality-header.png" /></a> <p>Today, we’re excited to announce the release of a new Text-To-Speech (TTS) engine that is performant and reliable. Text-to-speech turns text into natural-sounding speech across more than 50 languages powered by Google’s machine learning (ML) technology. The new text-to-speech engine on Wear OS uses smaller and more efficient prosody ML models to bring faster synthesis on Wear OS devices.</p> <p>Use cases for Wear OS’s text-to-speech can range from accessibility services, coaching cues for exercise apps, navigation cues, and reading aloud incoming alerts through the watch speaker or Bluetooth connected headphones. The engine is meant for brief interactions, so it shouldn’t be used for reading aloud a long article, or a long summary of a podcast.</p> <h3>How to use Wear OS’s TTS</h3> <p>Text-to-speech has long been supported on Android. Wear OS’s new TTS has been tuned to be performant and reliable on low-memory devices. All the Android APIs are still the same, so developers use the same process to integrate it into a Wear OS app, for example, <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/speech/tts/TextToSpeech#speak%28java.lang.CharSequence,%20int,%20android.os.Bundle,%20java.lang.String%29" target="_blank">TextToSpeech#speak</a></span> can be used to speak specific text. This is available on devices that run Wear OS 4 or higher.</p> <p>When the user interacts with the Wear OS TTS for the first time following a device boot, the synthesis engine is ready in about 10 seconds. For special cases where developers want the watch to speak <i><u>immediately</u></i> after opening an app or launching an experience, the following code can be used to pre-warm the TTS engine before any synthesis requests come in.</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;">private fun initTtsEngine() { <span style="color: #666666;">//</span> Callback when TextToSpeech connection is set up val callback <span style="color: #666666;">=</span> TextToSpeech<span style="color: #666666;">.</span>OnInitListener { status <span style="color: #666666;">-&gt;</span> <span style="color: green;">if</span> (status <span style="color: #666666;">==</span> TextToSpeech<span style="color: #666666;">.</span>SUCCESS) { <span style="color: blue;">Log</span><span style="color: #666666;">.</span>i(TAG, <span style="color: #ba2121;">"tts Client Initialized successfully"</span>) <span style="color: #666666;">//</span> Get default TTS locale val defaultVoice <span style="color: #666666;">=</span> tts<span style="color: #666666;">.</span>voice <span style="color: green;">if</span> (defaultVoice <span style="color: #666666;">==</span> null) { <span style="color: blue;">Log</span><span style="color: #666666;">.</span>w(TAG, <span style="color: #ba2121;">"defaultVoice == null"</span>) <span style="color: green;">return</span><span style="color: #19177c;">@OnInitListener</span> } <span style="color: #666666;">//</span> Set TTS engine <span style="color: green;">to</span> use default locale tts<span style="color: #666666;">.</span>language <span style="color: #666666;">=</span> defaultVoice<span style="color: #666666;">.</span>locale try { <span style="color: #666666;">//</span> Create a temporary file <span style="color: green;">to</span> synthesize sample text val tempFile <span style="color: #666666;">=</span> File<span style="color: #666666;">.</span>createTempFile(<span style="color: #ba2121;">"tmpsynthesize"</span>, null, applicationContext<span style="color: #666666;">.</span>cacheDir) <span style="color: #666666;">//</span> Synthesize sample text <span style="color: green;">to</span> our file tts<span style="color: #666666;">.</span>synthesizeToFile( <span style="color: #666666;">/*</span> text<span style="color: #666666;">=</span> <span style="color: #666666;">*/</span> <span style="color: #ba2121;">"1 2 3"</span>, <span style="color: #666666;">//</span> Some sample text <span style="color: #666666;">/*</span> params<span style="color: #666666;">=</span> <span style="color: #666666;">*/</span> null, <span style="color: #666666;">//</span> No params necessary <span style="color: green;">for</span> a sample request <span style="color: #666666;">/*</span> file<span style="color: #666666;">=</span> <span style="color: #666666;">*/</span> tempFile, <span style="color: #666666;">/*</span> utteranceId<span style="color: #666666;">=</span> <span style="color: #666666;">*/</span> <span style="color: #ba2121;">"sampletext"</span> ) <span style="color: #666666;">//</span> <span style="color: green;">And</span> clean up the file tempFile<span style="color: #666666;">.</span>deleteOnExit() } catch (e<span style="color: #666666;">:</span> Exception) { <span style="color: blue;">Log</span><span style="color: #666666;">.</span>e(TAG, <span style="color: #ba2121;">"Unhandled exception: "</span>, e) } } } tts <span style="color: #666666;">=</span> TextToSpeech(applicationContext, callback) } </pre></div> <p>When you are done using TTS, you can release the engine by calling <span style="color: #0d904f; font-family: Courier;">tts.shutdown()</span> in your activity’s <span style="color: #0d904f; font-family: Courier;">onDestroy()</span> method. This command should also be used when closing an app that TTS is used for.</p> <h3>Languages and Locales</h3> <p>By default, Wear OS TTS includes 7 pre-loaded languages in the system image: English, Spanish, French, Italian, German, Japanese, and Mandarin Chinese. OEMs may choose to preload a different set of languages. You can check what languages are available by using <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/speech/tts/TextToSpeech#getAvailableLanguages%28%29" target="_blank">TextToSpeech#getAvailableLanguages()</a></span>. During watch setup, if the user selects a system language that is not a pre-loaded voice file, the watch automatically downloads the corresponding voice file the first time the user connects to Wi-Fi while charging their watch. </p> <p>There are limited cases where the speech output may differ from the user’s system language. For example, in a scenario where a safety app uses TTS to call emergency responders, developers might want to synthesize speech in the language of the locale the user is in, not in the language the user has their watch set to. To synthesize text in a different language from system settings, use <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/speech/tts/TextToSpeech#setLanguage%28java.util.Locale%29" target="_blank">TextToSpeech#setLanguage(java.util.Locale)</a></span></p> <h3>Conclusion</h3> <p>Your Wear OS apps now have the power to talk, either directly <a href="https://developer.android.com/training/wearables/apps/audio" target="_blank">from the watch’s speakers or through Bluetooth</a> connected headphones. Learn more about <a href="https://developer.android.com/reference/android/speech/tts/TextToSpeech" target="_blank">using TTS</a>.</p> <p>We look forward to seeing how you use Text-to-speech engine to create more helpful and engaging experiences for your users on Wear OS!</p><p><br /></p> <div style="background: #f8f8f8; overflow:auto;width:auto;border:0;"><pre style="margin: 0; line-height: 125%">Copyright <span style="color: #666666">2023</span> Google LLC<span style="color: #666666">.</span> SPDX<span style="color: #666666">-</span>License<span style="color: #666666">-</span>Identifier<span style="color: #666666">:</span> Apache<span style="color: #666666">-2.0</span> </pre></div> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-5397271439092241782 2024-03-04T14:00:00.000-08:00 2024-03-04T14:00:00.121-08:00 Embracing Android 14: Meta's Early Adoption Empowered Enhanced User Experience <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW5n06FoVE-2EYCtpdVDhyphenhyphenTnQY6uxTLFwcX4ulmQ6OmzdgLDu500sWA8CPjM36tDpjiSCFJDsQ4fslD8InyzLPi4Tsin0zintvb4cfZbtK7WMb3BV9qXenxgSXsemkZwYkUCGOCanhUbJWMfErr-meqQ5Oo7eae1H4KC_cSh5XRngvHG3Hk6LDM0z4zOg/s1600/AndroidDev_MetaRelease__V4.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW5n06FoVE-2EYCtpdVDhyphenhyphenTnQY6uxTLFwcX4ulmQ6OmzdgLDu500sWA8CPjM36tDpjiSCFJDsQ4fslD8InyzLPi4Tsin0zintvb4cfZbtK7WMb3BV9qXenxgSXsemkZwYkUCGOCanhUbJWMfErr-meqQ5Oo7eae1H4KC_cSh5XRngvHG3Hk6LDM0z4zOg/s1600/AndroidDev_MetaRelease__V4.png" style="display: none;" /> <em>Posted by Terence Zhang ? Developer Relations Engineer, Google; in partnership with Tina Ho - Partner Engineering, TPM and Kun Wang ? Partner Engineering, Partner Engineer</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW5n06FoVE-2EYCtpdVDhyphenhyphenTnQY6uxTLFwcX4ulmQ6OmzdgLDu500sWA8CPjM36tDpjiSCFJDsQ4fslD8InyzLPi4Tsin0zintvb4cfZbtK7WMb3BV9qXenxgSXsemkZwYkUCGOCanhUbJWMfErr-meqQ5Oo7eae1H4KC_cSh5XRngvHG3Hk6LDM0z4zOg/s1600/AndroidDev_MetaRelease__V4.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW5n06FoVE-2EYCtpdVDhyphenhyphenTnQY6uxTLFwcX4ulmQ6OmzdgLDu500sWA8CPjM36tDpjiSCFJDsQ4fslD8InyzLPi4Tsin0zintvb4cfZbtK7WMb3BV9qXenxgSXsemkZwYkUCGOCanhUbJWMfErr-meqQ5Oo7eae1H4KC_cSh5XRngvHG3Hk6LDM0z4zOg/s1600/AndroidDev_MetaRelease__V4.png" /></a> <p>With the first <a href="https://android-developers.googleblog.com/2024/02/first-developer-preview-android15.html" target="_blank">Developer Preview of Android 15</a> now released, another new Android release that brings new features and under-the-hood improvements for billions of users worldwide will be coming shortly. As Android developers, you are key players in this evolution; by staying on top of the <a href="https://support.google.com/googleplay/android-developer/answer/11926878" target="_blank">targetSDK upgrade cycle</a>, you are making sure that your users have the best possible experience.</p> <p>The way Meta, the parent company of Instagram, Facebook, WhatsApp, and Messenger, approached Android 14 provides a blueprint for both developer success and user satisfaction. <b>Meta improved their velocity towards targetSDK adoption by 4x</b>, and so to understand more about how they built this, we spoke to the team at Meta, with an eye towards insights that all developers could build into their testing programs.</p> <h3>Meta’s journey on A14: A blueprint for faster adoption</h3> <p>When Android 11 launched, some of Meta’s apps experienced challenges with existing features, such as Chat Heads, and with new requirements, like scoped storage integration. Fixing these issues was complicated by slow developer tooling adoption and a decentralized app strategy. This experience motivated Meta to create an internal Android OS Readiness Program which focuses on prioritizing early and thorough testing throughout the Android release window and accelerating their apps’ targetSDK adoption.</p> <p>The program officially launched last year. By compiling apps against each Android 14 beta and conducting thorough automated and smoke tests to proactively identify potential issues, Meta was able to seamlessly adopt new Android 14 features, like Foreground Service types <a href="https://issuetracker.google.com/" target="_blank">and send timely feedback and bug reports to the Android team</a>, contributing to improvements in the OS.</p> <p>Meta also accelerated their targetSDK adoption for Android 14?updating Messenger, Facebook, and Instagram within one to two months of the AOSP release, compared to seven to nine months for Android 12 (<b>an increase of velocity of more than 4x!</b>). Meta’s newly created readiness program unlocked this achievement by working across each app to adopt latest Android changes while still maintaining compatibility. For example, by automating and simplifying their SDK release process, Meta was able to cut rollout time from three weeks to under three hours, enhancing cooperation between individual app teams by providing immediate access to the latest SDKs and allowing for rapid testing of new OS features. The centralized approach also meant Threads adopted Android 14 support quickly despite the fast-growing new app being supported by a minimal team. </p> <h3>Reaping the rewards: The impact on users</h3> <p>Meta's early targetSDK adoption strategy delivers significant benefits for users as well. Here's how:</p> <ul style="text-align: left;"><ul> <li><b>Improved reliability and compatibility:</b> Early adoption of Android previews and betas prevented surprises near the OS launch, guaranteeing a smooth day-one experience for users upgrading to the latest Android version. For example, with partial media permissions, Meta's extensive experimentation with permission flows ensured “users felt informed about the change and in control over their privacy settings,” while maximizing the app's media-sharing functionality.</li></ul></ul><br /><ul style="text-align: left;"><ul> <li><b>Robust experimentation with new release features:</b> Early Android release adoption gave Meta ample time to collaborate across privacy, design, and content strategy teams, enabling them to thoughtfully integrate the new Android features that come with every release. This enhanced the collaboration on other features, allowing Meta to roll out <a href="https://source.android.com/docs/core/camera/ultra-hdr" target="_blank">Ultra HDR</a> image experience on Instagram within 3 months of platform release in an “Android first” manner is a great example of this, delighting users with brighter and richer colors with a higher dynamic range in their Instagram posts and stories.</li> </ul></ul> <image><div style="text-align: center;"><img alt="Meta's adoption of Ultra HDR in Android 14 brings brighter colors and dynamic range to Instagram posts and stories." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYrW_yI6CcPjUcSgGaaDZ_784bCOcnub8cMzP48Wtj3MpT4n97ylqg67oyE_hNJh-buxbXstd8Q7HWPoNv_bF6eCor0_hpfeCAnlENTik0MRc8WhT44c9FtYcGu63PK01gSdxbBQ21CeeDm_ndcsmENgl66U6OftpGg0cuOePeZSaaCUd2XUeBKrcA15E/s1600/image2.png" width="100%" /></div><imgcaption><center><em>Meta's adoption of Ultra HDR in Android 14 brings brighter colors and dynamic range to Instagram posts and stories.</em></center></imgcaption></image><br /> <h3>Embrace the latest Android versions</h3> <p>Meta's journey highlights the compelling reasons for Android developers to adopt a similar forward-thinking mindset in working with the Android betas:</p> <ul style="text-align: left;"><ul> <li><b>Test your apps early:</b> Anticipate Android OS changes, ensuring your apps are prepared for the latest target SDK as soon as they become available to create a seamless transition for users who update to the newest Android version. </li></ul></ul><br /><ul style="text-align: left;"><ul> <li><b>Utilize latest tools to optimize user experience:</b> Test your apps thoroughly against each beta to identify and address any potential issues. Check the Android Studio Upgrade Assistant to highlight major breaking changes in each targetSDKVersion, and integrate the <a href="https://developer.android.com/about/versions/14/reference/compat-framework-changes" target="_blank">compatibility framework</a> tool into your testing process to help uncover potential app issues in the new OS version. </li></ul></ul><br /><ul style="text-align: left;"><ul> <li><b>Collaborate with Google:</b> Provide your valuable feedback and bug reports using the <a href="https://issuetracker.google.com/" target="_blank">Google issue tracker</a> to contribute directly to the improvement of the Android ecosystem.</li> </ul></ul> <p>We encourage you to take full advantage of the Android Developer Previews &amp; Betas program, starting with the newly-released <a href="https://android-developers.googleblog.com/2024/02/first-developer-preview-android15.html" target="_blank">Android 15 Developer Preview 1</a>. </p> <h3>The team behind the success</h3> <p>A big thank you to the entire Meta team for their collaboration in Android 14 and in writing this blog! We’d especially like to recognize the following folks from Meta for their outstanding contributions in establishing a culture of early adoption:</p> <ul><ul> <li>Tushar Varshney - Partner Engineering, Partner Engineer</li> <li>Allen Bae - Partner Engineering, EM</li> <li>Abel Del Pino - Facebook, SWE</li> <li>Matias Hanco - Facebook, SWE</li> <li>Summer Kitahara - Instagram, SWE</li> <li>Tom Rozanski - Messenger, SWE</li> <li>Ashish Gupta - WhatsApp, SWE</li> <li>Daniel Hill - Mobile Infra, SWE</li> <li>Jason Tang - Facebook, SWE</li> <li>Jane Li - Meta Quest, SWE</li> </ul></ul> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-3458013439399972136 2024-02-29T10:30:00.000-08:00 2024-03-12T12:01:23.294-07:00 Android Studio Iguana is stable <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMLW97x07fxQ0CLacNwpF1EkzVmEqrWeOIGWk1c8lkQ19okJMVRcjLDCOzacz4wkJG3gMS4Ot-m1qoDIzfQbhTH-dGtq5jkkv8QGLUc2uvAvfCSSaJWxg7zLrRL5NndmJ6-g1hwiH4PcFJPZqMnID3atks9uKYBzVq7GkQODb8co9XZIEQf06xApzqYX4/s1600/Android-Studio-Iguana-SOCIAL.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMLW97x07fxQ0CLacNwpF1EkzVmEqrWeOIGWk1c8lkQ19okJMVRcjLDCOzacz4wkJG3gMS4Ot-m1qoDIzfQbhTH-dGtq5jkkv8QGLUc2uvAvfCSSaJWxg7zLrRL5NndmJ6-g1hwiH4PcFJPZqMnID3atks9uKYBzVq7GkQODb8co9XZIEQf06xApzqYX4/s1600/Android-Studio-Iguana-SOCIAL.png" style="display: none;" /> <em>Posted by Neville Sicard-Gregory ? Senior Product Manager, Android Studio</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMLW97x07fxQ0CLacNwpF1EkzVmEqrWeOIGWk1c8lkQ19okJMVRcjLDCOzacz4wkJG3gMS4Ot-m1qoDIzfQbhTH-dGtq5jkkv8QGLUc2uvAvfCSSaJWxg7zLrRL5NndmJ6-g1hwiH4PcFJPZqMnID3atks9uKYBzVq7GkQODb8co9XZIEQf06xApzqYX4/s1600/Android-Studio-Iguana-SOCIAL.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMLW97x07fxQ0CLacNwpF1EkzVmEqrWeOIGWk1c8lkQ19okJMVRcjLDCOzacz4wkJG3gMS4Ot-m1qoDIzfQbhTH-dGtq5jkkv8QGLUc2uvAvfCSSaJWxg7zLrRL5NndmJ6-g1hwiH4PcFJPZqMnID3atks9uKYBzVq7GkQODb8co9XZIEQf06xApzqYX4/s1600/Android-Studio-Iguana-SOCIAL.png" /></a> <p>Today we are launching <a href="https://developer.android.com/studio" target="_blank">Android Studio Iguana</a> 🦎 in the stable release channel to make it easier for you to create high quality apps. With features like Version Control System support in App Quality Insights, to the new built-in support to create Baseline Profiles for Jetpack Compose apps, this version should enhance your development workflow as you optimize your app. Download the latest version today!</p> <p>Check out the list of new features in Android Studio Iguana below, organized by key developer flows.</p> <iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="kVZ1QNMMub0" width="100%" height="415" src="https://www.youtube.com/embed/kVZ1QNMMub0"></iframe> <h3>Debugging</h3> <h4 id="Version-control-system-integration-App-Quality-Insights"><span style="font-size: large">Version control system integration in App Quality Insights</span></h4> <p>When your release build is several commits behind your local source code, line numbers in <a href="https://firebase.google.com/docs/crashlytics/get-started?platform=android" target="_blank">Firebase Crashlytics</a> crash reports can easily go stale, making it more difficult to accurately navigate from crash to code when using <a href="https://developer.android.com/studio/debug/app-quality-insights" target="_blank">App Quality Insights</a>. If you’re using git for your version control, there’s now a solution to this problem.</p> <p>When you build your app using Android Gradle Plugin 8.3 or later and the latest version of the Crashlytics SDK, AGP includes git commit information as part of the build artifact that is published to the Play Store. When a crash occurs, Crashlytics attaches the git information to the report, and Android Studio Iguana uses this information to compare your local checkout with the exact code that caused the crash from your git history.</p> <p>After you build your app using Android Gradle Plugin 8.3 or higher with the latest Crashlytics SDK, and publish it, new crash reports in the App Quality Insights window let you either navigate to the line of code in your current git checkout or view a diff report between the current checkout and the version of your app codebase that generated the crash report. <a href="https://developer.android.com/studio/releases#aqi-vcs" target="_blank">Learn more</a>.</p> <image><div style="text-align: center;"><img id="imgFull" alt="app quality insights with version control system integration in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT1p7b4amrON_4eHtUegzZFUToeflQ6pDVsjzU5qrhsUXmyKY6cFAoZ1v3fJh1VtFmkyycF-XQOuB8RHsWZ8XXdGum-RfBTPmb_V97eXq9g2Y0m4p-fRrzpAXhZkkyLMi7d22wMK1-jkx98HN33w67rOpS-3eLFMAp3y6CYUXkny-9ONJP258OVGs0ySc/s1600/image6.png" width="100%"/></div><imgcaption><center><em>App Quality Insights with Version Control System Integration</em></center></imgcaption></image><br/> <h4 id="View-Crashlytics-crash-variants-App-Quality-Insights"><span style="font-size: large">View Crashlytics crash variants in App Quality Insights</span></h4> <image><div style="text-align: center;"><img id="imgFull" alt="app quality insights in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjopsyasNaKzqq9VwK_tGzpfW2Zj-UTpXEysJl3VIhKUBoaNPBwQfpQEWDwF02lhN3A-njmKWHiM9KHtHxr-ngv7WTFnhYkGEX0oCTZj1_PYQzr5bN1Dkn7VQAXWveDOZ0LorwSE79wuzHlY91o_q3lDO3OBEExHvZO1Jpbusqk3ChcCfSEC5-jp9VVXk0/s1600/image11.png" width="100%"/></div><imgcaption><center><em>Crash variants in App Quality Insights</em></center></imgcaption></image><br/> <p>Today, when you select a Crashlytics issue in App Quality Insights, you see aggregated data from events that share identical points of failure in your code, but may have different root causes. To aid in your analysis of the root causes of a crash, Crashlytics now groups events that share very similar stack traces as issue variants. You can now view events in each variant of a crash report in App Quality Insights by selecting a variant from the dropdown. Alternatively, you can view aggregate information for all variants by selecting <b>All</b>.</p> <h3>Design</h3> <h4 id="Jetpack-Compose-UI-Check"><span style="font-size: large">Jetpack Compose UI Check</span></h4> <p>To help developers build adaptive and accessible UI in Jetpack Compose, Iguana introduces a new UI Check mode in Compose Preview. This feature works similarly to <a href="https://developer.android.com/studio/releases/past-releases/as-electric-eel-release-notes#visual-linting" target="_blank">visual linting</a> and <a href="https://developer.android.com/guide/topics/ui/accessibility/testing#accessibility-scanner" target="_blank">accessibility checks integrations</a> for views. Activate Compose UI check mode to automatically audit your Compose UI and check for adaptive and accessibility issues across different screen sizes, such as text that's stretched on large screens or low color contrast. The mode highlights issues found in different preview configurations and lists them in the problems panel.</p> <p>Try it out by clicking the UI Check icon in Compose Preview.</p> <image><div style="text-align: center;"><img id="imgFull" alt="UI Check entry point in Compose Preview" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZmxUObWjCdKU1b_k7SM2GF3ctMOKgkM0DaR7iTAXNEJ1XB1La6M0XjY4FA3JpsWbmP075mUu4T1Vi9FK-4R9qO0_bMJ-KgqCCJ0of0cIBMxQ7uIijHST492HcwXdCP5advPejWe9iqMwohuaf6XW178dwOW8J0H0v-RmejVM5trelOXUso3fHWkYJoBs/s1600/image8.png" width="100%"/></div><imgcaption><center><em>UI Check entry point in Compose Preview</em></center></imgcaption></image><br/> <image><div style="text-align: center;"><img id="imgFull" alt="UI Check results of Reply App in Compose Preview" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoU9ZlgRQ_ayGBAYuQHc5on9Q1DHesdlJc08h2IgZI8RXrrvliPYiXFk939FP7N1Bmc52qnjnOrl_RhG-GuQOmhiWNdxT4kP0JnhYU1pdwDg_rj8YTtWpCU62fQ_DuGGlProqTD7DGMxzs7VDcb2_7BD9iQQtCG6dhyphenhyphenY_yjmmH18_JGio_7S0CoQeKx3c/s1600/image3.png" width="100%"/></div><imgcaption><center><em>UI Check results of Reply App in Compose Preview</em></center></imgcaption></image><br/> <h4><span style="font-size: large">Progressive rendering for Compose Preview</span></h4> <p>Compose Previews in Android Studio Iguana now implement progressive rendering, allowing you to iterate on your designs with less loading time. This feature automatically lowers the detail of out-of-view previews to boost performance, meaning you can scroll through even the most complex layouts without lag.</p> <image><div style="text-align: center;"><img id="imgFull" alt="moving image showing progressive rendering in Compose" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizA6oSmA5LLc5m2C2jxrzZwKUxk3EFAx3dzA15MPYtVwDRq5XFCqdGO0hgMi-EEHgdLCriPxflcVD4GcpHaV8bf_vQGAra4K0vb8QhBLr10br08O7NEUWP_EPu9at6oMCMx-HGTvQJfk9yChhCb8rYh2fylbnLHvRIymFI0B5dz_eFPTbt1tW3ZWuCIVw/s1600/image7.gif" width="100%"/></div><imgcaption><center><em>Progressive Rendering in Compose </em></center></imgcaption></image><br/> <h3>Develop</h3> <h4><span style="font-size: large">Intellij Platform Update</span></h4> <p>Android Studio Iguana includes the IntelliJ 2023.2 platform release, which has many new features such as support for GitLab, text search in Search Everywhere, color customization updates to the new UI and a host of new improvements. <a href="https://www.jetbrains.com/idea/whatsnew/2023-2/" target="_blank">Learn more</a>.</p> <h3>Testing</h3> <h4 id="Baseline-Profiles-module-wizard"><span style="font-size: large">Baseline Profiles module wizard</span></h4> <p>Many times when you run an Android app for the first time on a device, the app can appear to have a slow start time because the operating system has to run just-in-time compilation. To improve this situation, you can create <a href="https://developer.android.com/topic/performance/baselineprofiles/overview" target="_blank">Baseline Profiles</a> that help Android improve aspects like app start-up time, scrolling, and navigation speed in your apps. We are simplifying the process of setting up a Baseline Profile by offering a new <b>Baseline Profile Generator</b> template in the new module wizard (<b>File &gt; New &gt; New Module</b>). This template configures your project to support Baseline Profiles and employs the latest Baseline Profiles Gradle plugin, which simplifies setup by automating required tasks with a single Gradle command.</p> <image><div style="text-align: center;"><img id="imgFull" alt="Baseline Profile module wizard - Create New Module" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyKl8DkBdJgx4pL2FmWQCDe3tA95kmPYjyckhjetXmKUovCHj1865RvDhmtZ69h4D_lHkn9ivNvRv72z_TM0uZpoN3_lgmU0znQvH9PIEuOsBv84LOrDyrS-ZkiT1vL6-gOQsUzmsdJcz_n7XzUQ7aZZNiLQSCCAHjL5CtyGsE00GLX2xSYMAeMN0mFyQ/s1600/image1.png" width="100%"/></div><imgcaption><center><em>Baseline Profile Generator</em></center></imgcaption></image><br/> <p>Furthermore, the template creates a run configuration that enables you to generate a Baseline Profile with a single click from the "Select Run/Debug Configuration" dropdown list.</p> <image><div style="text-align: center;"><img id="imgFull" alt="Generate Baseline Profile drop-down menu" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEtil4Dxz-J9int-_rjsa3fPhBUWWVG3SSJFg_U7cUFuyidiKB1xwB3osGNS_r9ETRfrsR1uMZbRuC3epK5SFNO7lQZxTw8e59lbWosmaWSoFZgFVyp5o4Zyjid0Iy3ZlsDE-YiR6WZEMKe6joQDnerPSgiiVInbRo8zpLt1HsPfjElX8xvdx_PmWbFgI/s1600/image9.png" width="100%"/></div><imgcaption><center><em>Generate Baseline Profile drop-down menu</em></center></imgcaption></image><br/> <h4 id="Espresso-Device-API"><span style="font-size: large">Test against configuration changes with the Espresso Device API</span></h4> <image><div style="text-align: center;"><img id="imgFull" alt="Synchronous testing of window size changes using Espresso Device API" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz1i3rsJk6RwVmTP7T74LJjvZhn_bSiRcq6FO-KqIn87-oSwAVT98bf3mVDA2M8pFLCfgA6pd1qKoD-DuDmdZ8ysrE9CjB38xJ6j_wouW_Ea1QmsVxBtkBQHxgMtadci1B9B7h-UqY1kuXFRQHfGG7imIyjDommwzYhT1FHlVxel_f869cOhomhYxIP64/s1600/image10.png" width="100%"/></div><imgcaption><center><em>Synchronous testing of window size changes using Espresso Device API</em></center></imgcaption></image><br/> <p>Catch layout problems early and ensure your app delivers a seamless user experience across devices and orientations. The <a href="https://github.com/android/testing-samples/tree/main/ui/espresso/EspressoDeviceSample" target="_blank">Espresso Device API</a> simulates how your app reacts to configuration changes?such as screen rotation, device folding/unfolding, or window size changes?in a synchronous way on virtual devices. These APIs help you rigorously test and preemptively fix issues that frustrate users so you build more reliable Android apps with confidence. These APIs are built on top of new gRPC endpoints introduced in Android Emulator 34.2, which enables secure bidirectional data streaming and precise sensor simulation.</p> <h4 id="Pixel-8-Pixel-8-Pro-devices-in-Android-Emulator-(34.2)"><span style="font-size: large">Pixel 8 and Pixel 8 Pro devices in Android Emulator (34.2)</span></h4> <p>Test your app on the latest Google Pixel device configurations with the updated Android Virtual Device definitions in Android Studio. With Android Studio Iguana and the latest Android Emulator (34.2+), access the Pixel Fold, Pixel Tablet, Pixel 7a, Pixel 8, and Pixel 8 Pro. Validating your app on these virtual devices is a convenient way to ensure that your app reacts correctly to a variety of screen sizes and device types.</p> <image><div style="text-align: center;"><img id="imgFull" alt="New Pixel Android Virtual Devices in the Android Emulator" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSAlg0gBem1FyQlMUdsAhO1FRqUikc6ylXGFWuy-w90PzwkkrY7AoTTRi__scQQuWAVZX07N0X2AeCFzjfE9OKe92YEXMyqVn-mFLAbT4FQCMmpnc5otcQzZWn4D6pVOH5wmf5_q9l0R9yK7ifJZhleaVFDp5bnofCergyxRiY4AhzB4rq1H6n_S7vuT0/s1600/image5.png" width="100%"/></div><imgcaption><center><em>New Pixel Android Virtual Devices in the Android Emulator. </em></center></imgcaption></image><br/> <h3>Build</h3> <h4 id="Support-Gradle-Version-Catalogs"><span style="font-size: large">Support for Gradle Version Catalogs</span></h4> <p>Android Studio Iguana streamlines dependency management with its enhanced support for TOML-based Gradle Version Catalogs. You'll benefit from:</p> <ul><ul> <li><b>Centralized dependency management:</b> Keep all your project's dependencies organized in a single file for easier editing and updating.</li> <li><b>Time-saving features:</b> Enjoy seamless code completion, smart navigation within your code, and the ability to quickly edit project dependencies through the convenient Project Structure dialog.</li> <li><b>Increased efficiency:</b> Say goodbye to scattered dependencies and manual version updates. Version catalogs give you a more manageable, efficient development workflow.</li> </ul></ul> <p>New projects will automatically use version catalogs for dependency management. If you have an existing project, consider making the switch to benefit from these workflow improvements. To learn how to update to Gradle version catalogs, see <a href="https://developer.android.com/studio/build/migrate-to-catalogs" target="_blank">Migrate your build to version catalogs</a>.</p> <h4 id="policy-issues"><span style="font-size: large">Additional SDK insights: policy issues</span></h4> <p>Android Studio Iguana now proactively alerts you to potential Google Play policy violations through integration with the <a href="https://developer.android.com/distribute/sdk-index" target="_blank">Google Play SDK Index</a>. Easily see Play policy issues right in your build files and Project Structure Dialog. This streamlines compliance, helping you avoid unexpected publishing delays or rejections on the Google Play Store.</p> <image><div style="text-align: center;"><img id="imgFull" alt="Android Studio's project structure dialog showing a warning from the Google Play SDK Index" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2-PFVbEYLFKYj8SSlJThmWnjpbVrhZbWucwaoArGPvOo2S7ljD0Ggddg90ZlXPNyCCWdEHYCoNjb24K3cwT7tb1rygEqGDgJ9D8TL6KZ63Jw0wR7qbslgMLBBHlhGfvHnnXnX5sf8H_F9kmSQji7VaGtI8cq6P-RJ7MbEDTzC9y7LdYTuNtJjEegmF1E/s1600/image4.png" width="100%"/></div><imgcaption><center><em>A warning from the Google Play SDK Index in Android Studio’s Project Structure dialog</em></center></imgcaption></image><br/> <h4><span style="font-size: large">Android Studio compileSdk version support</span></h4> <p>Using Android Studio to develop a project that has an unsupported <a href="https://developer.android.com/build#android_sdk_settings" target="_blank">compileSdk version</a> can lead to unexpected errors because older versions of Android Studio may not handle the new Android SDK correctly. To avoid these issues, Android Studio Iguana now explicitly warns you if your project’s intended compileSdk is for a newer version that it does not officially support. If available, it also suggests moving to a version of Android Studio that supports the compileSdk used by your project. Keep in mind that <a href="https://developer.android.com/studio/releases#android_gradle_plugin_and_android_studio_compatibility" target="_blank">upgrading Android Studio might also require that you upgrade AGP</a>.</p> <h3><b>Summary</b></h3> <p>To recap, <a href="https://developer.android.com/studio" target="_blank">Android Studio Iguana</a> 🦎includes the following enhancements and features:</p> <p><b>Debugging</b></p> <ul><ul> <li><a href="#Version-control-system-integration-App-Quality-Insights">Version control in App Quality Insights</a></li> <li><a href="#View-Crashlytics-crash-variants-App-Quality-Insights">View Crashlytics in App Quality Insights</a></li> </ul></ul> <p><b>Design</b></p> <ul><ul> <li><a href="#Jetpack-Compose-UI-Check">Jetpack Compose UI Check</a></li> <li>Progressive rendering for Compose Preview</li> </ul></ul> <p><b>Develop</b></p> <ul><ul> <li>Intellij platform update</li> </ul></ul> <p><b>Testing</b></p> <ul><ul> <li><a href="#Baseline-Profiles-module-wizard">Baseline Profiles wizard</a></li> <li><a href="#Espresso-Device-API">Espresso Device API</a></li> <li><a href="#Pixel-8-Pixel-8-Pro-devices-in-Android-Emulator-(34.2)">The latest Android Virtual Devices</a></li> </ul></ul> <p><b>Build</b></p> <ul><ul> <li><a href="#Support-Gradle-Version-Catalogs">Support for Gradle Version Catalogs</a></li> <li><a href="#policy-issues">Policy issue warnings in Google Play SDK Index</a></li> <li>CompileSDK version support</li> </ul></ul> <h3>Download Android Studio Today</h3> <p>Download <a href="https://developer.android.com/studio" target="_blank">Android Studio Iguana</a> 🦎 today and take advantage of the latest features to streamline your workflow and help you make better apps. Your feedback is essential ? <a href="https://developer.android.com/studio/known-issues" target="_blank">check known issues</a>, <a href="https://developer.android.com/studio/report-bugs" target="_blank">report bugs</a>, <a href="https://developer.android.com/studio/report-bugs" target="_blank">suggest improvements</a>, and be part of our vibrant community on <a href="https://www.linkedin.com/showcase/androiddev/posts/?feedView=all" target="_blank">LinkedIn</a> <a href="https://medium.com/androiddevelopers" target="_blank">Medium</a>, <a href="https://www.youtube.com/c/AndroidDevelopers/videos" target="_blank">YouTube</a>, or <a href="https://twitter.com/androidstudio" target="_blank">X (formerly known as Twitter)</a>. Let's build the future of Android apps together! </p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-4641923297888864991 2024-02-26T10:00:00.000-08:00 2024-03-05T10:02:17.643-08:00 New goodies from Android, Wearables at Mobile World Congress + tune in to a new episode of #TheAndroidShow next week! <meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI0RiyyrPaaVPxXBOu8d8y9wAUWn_45S30v6PSfecI6OKJNKDWdm6gsiLK_14cxBUXhlnk67rK358EWhqvVABQqRVcjKo6iYmP9uPeNBAC3pdSQlMkNoit8dpmSxiymkqleXSeWNqB_q0upzqPX-waFeELV1B7JlaWGXvHqnEUfKaV-QxfGfvS8lIwjNQ/s1600/TAS-Social-Q1-AD.png"> <img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI0RiyyrPaaVPxXBOu8d8y9wAUWn_45S30v6PSfecI6OKJNKDWdm6gsiLK_14cxBUXhlnk67rK358EWhqvVABQqRVcjKo6iYmP9uPeNBAC3pdSQlMkNoit8dpmSxiymkqleXSeWNqB_q0upzqPX-waFeELV1B7JlaWGXvHqnEUfKaV-QxfGfvS8lIwjNQ/s1600/TAS-Social-Q1-AD.png"> <em>Posted by Anirudh Dewani, Director of Android Developer Relations</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPcej6RGlKIMCO01jywpjhx06BwCX4H99IxkpeZ-kOYOky0wayXs55BenCgg51d03jwUNyWIa3LqfHqfzZew9kj7o4o8x0QilXkmvOVILoz9V8EpMg0Tw1diGmgmIfNS3nAyTtNpjWEHQqToRo2qWHpaQvPVX4yhEz_kzARdB-F-YglL3jIeAgtDTjBY8/s1600/image%20%285%29.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPcej6RGlKIMCO01jywpjhx06BwCX4H99IxkpeZ-kOYOky0wayXs55BenCgg51d03jwUNyWIa3LqfHqfzZew9kj7o4o8x0QilXkmvOVILoz9V8EpMg0Tw1diGmgmIfNS3nAyTtNpjWEHQqToRo2qWHpaQvPVX4yhEz_kzARdB-F-YglL3jIeAgtDTjBY8/s1600/image%20%285%29.png" /></a> <p>Earlier today, at Mobile World Congress (MWC), an annual conference showcasing the latest in mobile, Android and our partners unveiled a range of new goodies, including new wearables, foldables, as well as a number of new features for Android users. Keep reading below to see how you, as developers, can take advantage of these new features and devices that are being released. And in just over a week, on Thursday March 7 at 10AM PT, we’ll be kicking off another episode of #TheAndroidShow, our quarterly live show on YouTube and on <a href="http://developer.android.com/events/show" target="_blank">developer.android.com</a>, where we’ll dive more into these topics.</p> <iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="3D4k2z8Wmw0" width="100%" height="413" src="https://www.youtube.com/embed/3D4k2z8Wmw0"></iframe><br/> <h3>Meet the new watch from OnePlus and how we’re boosting power with the Wear OS hybrid interface</h3> <p>Wearables are on display across MWC this week, and one of our favorites is OnePlus Watch 2, powered with the latest version of Wear OS (<a href="https://android-developers.googleblog.com/2023/10/wear-os-4-is-now-stable-and-available-on-google-pixel-watch-2.html" target="_blank">Wear OS 4</a>). As part of our ongoing work to improve the <a href="https://wearos.google.com/" target="_blank">Wear OS by Google</a> user experience, we’ve made fundamental changes to the platform and substantially expanded the capabilities of the Wear OS hybrid interface that improve two key areas: power and performance. As a developer, you can leverage existing Wear OS APIs to get underneath optimizations without any added effort ? no code changes required! <a href="https://android-developers.googleblog.com/2024/02/wear-os-hybrid-interface-boosting-power-and-performance.html " target="_blank">You can read more about the updates here.</a> </p> <image><div style="text-align: center;"><img alt="Images of three people wearing the OnePlus Watch 2" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY2MRgmDxsZC8Tni50uvlDqwljNbb4WyRSEHDbE4PsY_-0BL-P0W49r7v6TMX8gH39BxcjRaPNr2ZdYhbHF9vkopYBMLPE2BSmr_Nq2bC60P3hRkiNeZMgbZSyazYw5vUXprwD3sJQswKcsqzLTXv-HK-F6o-Bax9qNYmE5mNUPNLqw774no8nK4r7X7U/s1600/Oneplus_social.png" width="100%" /></div></image><br /> <h3>A few new features for Android users</h3> <p>Google released 9 new features Android users can take advantage of across Google apps, you can <a href="https://blog.google/products/android/new-android-features-february-2024" target="_blank">read more about those features here</a>. For developers, we wanted to highlight a few ways you can take advantage of this news across experiences you build into your apps:</p> <ul style="text-align: left;"><ul> <li><b>More places for users to see their Health Connect data, now in the Fitbit app:</b> With permission from your users, <a href="https://developer.android.com/health-and-fitness/guides/health-connect" target="_blank">Health Connect</a> is a central way to connect and sync their favorite health and fitness apps, see all their data in one place, and stay in control of their privacy. By setting up Health Connect in the Fitbit mobile app for Android, users will have an overview of their health and fitness data from across their apps in one place. You can <a href="https://android-developers.googleblog.com/2023/08/health-connect-brings-together-peloton-oura-lifesum-for-deeper-health-and-fitness-insights.html" target="_blank">join developers like Peloton, ?URA, and Lifesum</a> who are using Health Connect to provide their users with deeper health and fitness insights, <a href="https://developer.android.com/health-and-fitness/guides/health-connect" target="_blank">get started now</a>!</li></ul></ul><ul style="text-align: left;"><ul> <li><b>Add Stylus support, like Google Docs did: </b> With Google Docs markups, you can <a href="https://www.android.com/new-features-on-android/?feature=google-docs-markups&amp;utm_source=blog&amp;utm_medium=owned&amp;utm_campaign=y24q1spotlight/#gms-filter" target="_blank">add handwritten annotations to Docs</a> from your Android phone or tablet using just your finger or stylus. Google Docs took advantage of stylus support; <a href="https://developer.android.com/guide/topics/large-screens/support-advanced-stylus-features" target="_blank"> you can learn more about adding support for Stylus here</a>.</li></ul></ul><ul style="text-align: left;"><ul> <li><b>Use Tiles for Wear OS, like Google Maps did:</b> With <a href="https://www.android.com/new-features-on-android/?feature=transit-directions-on-google-maps-for-wear-os&utm_source=blog&utm_medium=owned&utm_campaign=y24q1spotlight/#gms-filter" target="_blank">public transit directions on Google Maps for Wear OS</a>, you can leave your phone in your pocket and glance at your wrist to make sure you catch your bus, train or ferry. Users can see these public transit directions through Google Maps use of <a href="https://developer.android.com/design/ui/wear/guides/surfaces/tiles" target="_blank">Tiles</a> which provide quick access to the information and actions users need to get things done. <a href="https://developer.android.com/training/wearables/tiles" target="_blank">You can learn more about building a Tile for your app here</a>.</li> </ul></ul> <image><div style="text-align: center;"><img alt="Image that reads 'New updates on Android' with pictures of a smart watch, laptop, and Android Auto" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY6auQvdiAc77ulf-KnhpPWzh43OHJp9xTds7BPw8HWrf_SrGOCJ_45AAV8ABdQzgD4ooHD4z7XT41DTaXivXAAO9MDHmjuIvDnfW5UoQ48_gRaJMtd6SB1uzEzqdmVRrsavcmH1Asot1ob9EgqKXtLbRMxIf5axHi5AIQofNgTc5pv9QLmdzNCuPPvZM/s1600/image2.jpg" width="100%" /></div></image> <h2><span style="font-size: x-large;">A new episode of #TheAndroidShow, live on March 7 at 10AM PT. Send us your #AskAndroid questions now! </span></h2> <p>You can join us on March 7 at 10AM PT for a new episode of <b>#TheAndroidShow.</b> In this quarterly show, we’ll unpack the latest Android foldables and large screens for you to get building on, plus a behind-the-scenes on Gemini Nano and AICore.</p> <p>We’ll have a live #AskAndroid Q&amp;A with the team about building Android; you can ask us about building excellent apps across devices, Android 15, Compose, Gemini and more, using #AskAndroid on X or on YouTube. Our experts are ready to answer your questions live!</p> <p><b>#TheAndroidShow: March 7 at 10AM PT</b>, broadcast live on YouTube and <a href="https://developer.android.com/events/show" target="_blank">d.android.com/events/show</a>!</p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-8559933874975468015 2024-02-26T07:00:00.000-08:00 2024-02-26T07:46:20.443-08:00 Wear OS hybrid interface: Boosting power and performance <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmm4lj8twpvPFOe835BVS8ODXRQe300l72XMYE-oW50Ce79FGpaa9UHCtGcnhi_GZcsUCsVrbsy2mp3uVV5GPH7BRATgh-t4ZnmkG_PVICWha2ilkXy5k0O256wwlEby3PDLB-u6qKB3nyV6rtXurwlfUQqvKyQaotUso_E-Z15ql3xcuJml625jwR6PA/s1600/WearOS-OnePlus-AD-Social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmm4lj8twpvPFOe835BVS8ODXRQe300l72XMYE-oW50Ce79FGpaa9UHCtGcnhi_GZcsUCsVrbsy2mp3uVV5GPH7BRATgh-t4ZnmkG_PVICWha2ilkXy5k0O256wwlEby3PDLB-u6qKB3nyV6rtXurwlfUQqvKyQaotUso_E-Z15ql3xcuJml625jwR6PA/s1600/WearOS-OnePlus-AD-Social.png" style="display: none;" /> <em>Posted by <a href="https://twitter.com/kseniiaS" target="_blank">Kseniia Shumelchyk</a>, Android Developer Relations Engineer</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOORsnGuE8R2oK8MeCeUegCvo3kCWraitp4mtBuyoXY9Y33cuHBJiF0JEBpipOSPLBsfyvtxC8rFdV-pxsQwX00xmE3jszlI68QLgauapkYOt_4wZdotYsITlgTehohAawtmuSOadMsnDHtv8b7fHcqADtmqo21_j0rCuih20mNd6srIEq_tKa3mTEY0I/s1600/Oneplus_blogheader.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOORsnGuE8R2oK8MeCeUegCvo3kCWraitp4mtBuyoXY9Y33cuHBJiF0JEBpipOSPLBsfyvtxC8rFdV-pxsQwX00xmE3jszlI68QLgauapkYOt_4wZdotYsITlgTehohAawtmuSOadMsnDHtv8b7fHcqADtmqo21_j0rCuih20mNd6srIEq_tKa3mTEY0I/s1600/Oneplus_blogheader.png" /></a> <p>In collaboration with our hardware partners, we’ve continued to prioritize the <a href="https://wearos.google.com/" target="_blank">Wear OS</a> by Google user experience. As such, we’ve made fundamental design changes to the platform and substantially expanded the capabilities of the Wear OS hybrid interface that improve two key areas: power and performance.</p> <p>With <a href="https://www.prnewswire.com/news-releases/introducing-oneplus-watch-2-a-dual-engine-flagship-smartwatch-powered-with-wear-os-by-google-302070328.html#:~:text=DALLAS%2C%20Feb.%2026%2C%202024,%E2%84%A2%20%28Wear%20OS%204%29" target="_blank">OnePlus Watch 2</a>, powered with the latest version of Wear OS (<a href="https://android-developers.googleblog.com/2023/10/wear-os-4-is-now-stable-and-available-on-google-pixel-watch-2.html" target="_blank">Wear OS 4</a>), the dual-chipset architecture works with our hybrid interface to get both chips to work better in tandem. This enables even more use cases to benefit from dramatically extended battery life of up to 100 hours of regular use with all functionalities accessible in Smart Mode.</p> <p>Together, we’ve created a premium smartwatch experience that doesn’t compromise the advanced feature set or battery life. In this post, we’ll share how you can benefit from these changes when building experiences for Wear OS.</p> <h2><span style="font-size: x-large;">On the edge of innovation: redesigned smartwatch architecture</span></h2> <p>Wear OS smartwatches have a dual-chipset architecture inclusive of a powerful application processor (AP) and ultra low-power co-processor microcontroller unit (MCU). The architecture has a powerful AP capable of handling complex operations en-masse, and is seamlessly coupled with a low power MCU.</p> <p>The Wear OS hybrid interface enables intelligent switching between the MCU or the AP, allowing the AP to be suspended when not needed to preserve battery life. It helps, for instance, achieve more power-efficient experiences, like sensor data processing on the MCU while the AP is asleep. At the same time, the hybrid interface provides a seamless transition between these states, keeping a rich and premium user experience without jarring transitions between power modes.</p> <image><div style="text-align: center;"><img alt="ALT TEXT" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSSIa-_v9BKX-IzB2JLfd6Bz8CL3cQDm2ka_DXn8DPR92iM463UzNbpgWaVno3FJwPildLcdvFM83cAyCBjxRmhtM48nWFv7XzDPQFi5rFhfZCoJOM-pxxcTQ6VcXKy1VIR8kig880mWHhQtiPYQ6kKgY90Hkgg2eQ6Zrk3xKOMYPI_i0vCbxglUVx3LU/s1600/image2.gif" width="100%" /></div></image><br /> <h3 style="text-align: left;"><span style="font-size: large;">Connectivity and notification experience</span></h3> <p>To enhance connectivity-reliant interactions like notifications and phone calls, OnePlus utilized platform capabilities with the notification API in the hybrid interface, enabling the MCU to process regular notification experiences and reduce the need to activate the AP.</p> <p>For example, <a href="https://developer.android.com/training/wearables/notifications" target="_blank">bridged notifications</a> will be delivered to the watch without waking up the high-performance AP. Users can read and dismiss these notifications while the watch is still powered by the MCU. The MCU can also handle wearable-specific actions in notifications, such as quick replies or remote actions.</p> <h2><span style="font-size: x-large;">What this means for development</span></h2> <p>You can leverage existing Wear OS APIs to get these optimizations without any added effort ? no code changes required!</p> <h3 style="text-align: left;"><span style="font-size: large;">Notifications</span></h3> <p>The notification hybrid interface enables seamless transitions between power modes to work with the Wear OS notification stack. You get the best notification performance by using the <a href="https://developer.android.com/training/wearables/notifications?_gl=1*9dlcvi*_up*MQ..*_ga*NjY5MzY0MTMzLjE3MDc3ODEwMzU.*_ga_6HH9YJMN9M*MTcwNzc4MTAzNC4xLjAuMTcwNzc4MTAzNC4wLjAuMA..#add-wearable-features" target="_blank">Notification API</a>.</p> <h3 style="text-align: left;"><span style="font-size: large;">Health &amp; Fitness experiences</span></h3> <p>The Wear OS hybrid interface also elevates the fitness experience with more precise workout tracking, automatic sports recognition and smarter health data monitoring. All of these can be offered to users without compromising battery life.</p> <p>Starting with Wear OS 3, developers use <a href="https://developer.android.com/health-and-fitness/guides/health-services" target="_blank">Health Services on Wear OS</a> to gain access to sensor data. The health hybrid interface works under the hood to enable power optimizations by batching sensor data on the MCU and periodically updating developer apps through the Health Services API on the AP.</p> <h3 style="text-align: left;"><span style="font-size: large;">Watch Faces</span></h3> <p>With Wear OS 4, we launched the <a href="https://android-developers.googleblog.com/2023/05/introducing-watch-face-format-for-wear-os.html" target="_blank">Watch Face Format</a>, a declarative XML format to create customizable and power-efficient watch faces.</p> <p>The platform has created capabilities to implement Watch Face Format rendering on the MCU, so using the new format helps future-proof certain watch faces to take advantage of emerging optimizations in future devices for better battery usage.</p> <p>Check out the <a href="https://developer.android.com/training/wearables/wff" target="_blank">watch face format</a> documentation and <a href="https://developer.android.com/design/ui/wear/guides/surfaces/watch-faces" target="_blank">design guidelines</a> for Wear OS watch faces.</p> <h2><span style="font-size: x-large;">Expand your reach with Wear OS</span></h2> <p>With the additions to the Wear OS smartwatch ecosystem and expanded device capabilities, it's an ideal time to build experiences for smartwatches that can reach more users and benefit your business.</p> <p>To begin developing apps for Wear OS, try our <a href="https://developer.android.com/codelabs/compose-for-wear-os" target="_blank">Compose for Wear OS codelab</a>, and check out the <a href="http://d.android.com/wear" target="_blank">documentation</a> and <a href="https://github.com/android/wear-os-samples" target="_blank">samples</a>.</p> <p>Read more about <a href="https://android-developers.googleblog.com/2023/10/wear-os-4-is-now-stable-and-available-on-google-pixel-watch-2.html" target="_blank">developer updates in Wear OS 4</a>, and how you can get your apps ready for the latest Wear OS watches.</p> <p>We can’t wait to see what experiences you’ll build!</p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-6176342198127823477 2024-02-22T09:00:00.000-08:00 2024-02-22T09:00:00.129-08:00 Easily add document scanning capability to your app with ML Kit Document Scanner API <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9szIo2TBAryM51OQHMHjvoJRkwMs2Pa3NXmFxmZrWGdLC2c83LgSXwlf2MypoXN2IBz_3SOS-HQQqKDRAWYfWDmHeNyGl5KUaFkkJeEpKLA2NIX8Vtvrt7pnUdfDDTg6ZmOLfmhQKIldp9v96yadQnUa2r8fZUS6N2t9zPCPJNZteai33hPjUKq6z23k/s1600/a_new_foundtion_editorial-social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9szIo2TBAryM51OQHMHjvoJRkwMs2Pa3NXmFxmZrWGdLC2c83LgSXwlf2MypoXN2IBz_3SOS-HQQqKDRAWYfWDmHeNyGl5KUaFkkJeEpKLA2NIX8Vtvrt7pnUdfDDTg6ZmOLfmhQKIldp9v96yadQnUa2r8fZUS6N2t9zPCPJNZteai33hPjUKq6z23k/s1600/a_new_foundtion_editorial-social.png" style="display: none;" /> <em>Posted by Thomas Ezan ? Sr. Developer Relations Engineer; Chengji Yan, Penny Li ? ML Kit Engineers; David Miro Llopis ? Product Manager</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm1t-9xVtRVMAjnjo5Ji5Mpx9qcqcJgdeeEOpfOB4AtYrktrF6MhoMMC8VlPKhNxF0mT-D3GA8Ja8ig0KiYnV6bZRInjHxJbkbM1sOinK5SqmJGqeWWHUxYkJ-oB8iorE9-X4MVJUaYMTEn-FycA27R4eFcA2HaUKABbP5zJbWSnCNWPVQzJZkQAqBqeI/s1600/a_new_foundtion_editorial_header.png"><img border="0" data-original-height="800" data-original-width="1058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm1t-9xVtRVMAjnjo5Ji5Mpx9qcqcJgdeeEOpfOB4AtYrktrF6MhoMMC8VlPKhNxF0mT-D3GA8Ja8ig0KiYnV6bZRInjHxJbkbM1sOinK5SqmJGqeWWHUxYkJ-oB8iorE9-X4MVJUaYMTEn-FycA27R4eFcA2HaUKABbP5zJbWSnCNWPVQzJZkQAqBqeI/s1600/a_new_foundtion_editorial_header.png" /></a> <p>We are excited to announce the launch of the <a href="https://developers.google.com/ml-kit/vision/doc-scanner" target="_blank">ML Kit Document Scanner API</a>. This new API makes it easy to add advanced document scanning capabilities with a high-quality and consistent user interface to your Android app. The ML Kit Document Scanner API enables your users to quickly and easily digitize paper documents.</p> <p>Like the other ML Kit APIs, the ML Kit Document Scanner API enables you to seamlessly integrate features powered by Machine Learning (ML) without any ML knowledge.</p> <image><div style="text-align: center;"><img alt="ml kit document scanner illustration" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3HKj8jUfxGqQIjF_4IdTi5FHiFqJ0Lh-SZmVLV62K08SunYqiT13hozvG4x6Rkf2gF8IhMdp7a6ZzGUT_iObDSJzVXkuIbAD_PD9Yb2uBCnqWPQE6VNEj7wpqHkzCeVW7jN4fNi0spo3Tx0EV2V-rxlC_5GrlegWEzIeGEDq024Dir8LPCia8s4vctnE/s1600/image4.png" width="100%" /></div></image> <h3>Why Document Scanner SDK?</h3> <p>Despite the digital revolution, paper documents and printouts are still present in our everyday life. Some of our most important documents are still physical (identity documents, receipts, etc.).</p> <p>The ML Kit Document Scanner API offers a number of benefits, including:</p> <ul><ul> <li>A high-quality and consistent user interface for digitizing physical documents.</li> <li>Accurate document detection with precise corner and edge detection for a seamless scanning experience and optimal scanning results.</li> <li>Flexible functionality allows users to crop scanned documents, apply filters, remove fingers, remove stains and other blemishes and send digitized files in PDF and JPEG formats back to your app.</li> <li>On-device processing helps preserve privacy.</li> <li>A complete solution eliminating the need for camera permission.</li> </ul></ul> <p>The ML Kit Document Scanner API is already used by Google Drive Android application and the Google Pixel Camera.</p> <image><div style="text-align: center;"><img alt="moving image showing ML Kit Document scanner API in action in Google Drive" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtQtiEsIs_LrwPwkt6LoySSeA9sEjbBraOfzsFlLEBi1OdCyeR7JJjH42KtkiaawCdBpAXEG_BgokdO4kE2iptk9TCgpC5ld8FURaEjqpu32tlROVDZbjRtgK3biAsSnrobbvAGJSJ2bJYH8h9uj6Y-zx1aJPRI8-fIaKv5Cgaco3Q5JBdZAGbcIL6ztY/s1600/docscan_demo.gif" width="50%" /></div><imgcaption><center><em>ML Kit Document scanner API in action in Google Drive</em></center></imgcaption></image> <h3>Get started</h3> <p>The ML Kit Document Scanner API requires Android API level 21 or above. The models, scanning logic, and UI flow are dynamically downloaded via Google Play services so the ML Kit Document Scanner API has a minimal impact on your app size.</p> <p>To integrate it in your app, start by configuring the scanner options and getting a scanner client:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">val options <span style="color: #666666;">=</span> GmsDocumentScannerOptions<span style="color: #666666;">.</span>Builder() <span style="color: #666666;">.</span>setGalleryImportAllowed(false) <span style="color: #666666;">.</span>setPageLimit(<span style="color: #666666;">2</span>) <span style="color: #666666;">.</span>setResultFormats(RESULT_FORMAT_JPEG, RESULT_FORMAT_PDF) <span style="color: #666666;">.</span>setScannerMode(SCANNER_MODE_FULL) <span style="color: #666666;">.</span>build() val scanner <span style="color: #666666;">=</span> GmsDocumentScanning<span style="color: #666666;">.</span>getClient(options)</span> </pre></div> <p>Then register an <span style="color: #0d904f; font-family: Courier;">ActivityResultCallback</span> to receive the scanning results:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">val scannerLauncher <span>=</span> registerForActivityResult(StartIntentSenderForResult()) { result <span>-&gt;</span> { <span>if</span> (result<span>.</span>resultCode <span>==</span> RESULT_OK) { val result <span>=</span> GmsDocumentScanningResult<span>.</span>fromActivityResultIntent(result<span>.</span>data) result<span>.</span>getPages()<span>?.</span>let { pages <span>-&gt;</span> <span>for</span> (page in pages) { val imageUri <span>=</span> page<span>.</span>getImageUri() } } result<span>.</span>getPdf()<span>?.</span>let { pdf <span>-&gt;</span> val pdfUri <span>=</span> pdf<span>.</span>getUri() val pageCount <span>=</span> pdf<span>.</span>getPageCount() } } } }</span> </pre></div> <p>Finally launch the document scanner activity:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">scanner<span>.</span>getStartScanIntent(activity) <span>.</span>addOnSuccessListener { intentSender <span>-&gt;</span> scannescannerrLauncher<span>.</span>launch(IntentSenderRequest<span>.</span>Builder(intentSender)<span>.</span>build()) } <span>.</span>addOnFailureListener { <span>...</span> } </span></pre></div> <p>To get started with the ML Kit Document Scanner API, visit the <a href="https://developers.google.com/ml-kit/vision/doc-scanner" target="_blank">documentation</a>. We can’t wait to see what you’ll build with it!</p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-9132909337618940925 2024-02-16T11:00:00.000-08:00 2024-02-16T11:01:28.289-08:00 The First Developer Preview of Android 15 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDDCgXcu5EI9w514aJNVe4C1CciGCHkKn8lWUyaa_TK-HspfRAKoKvDAiMTbGZ-Y406y9W5sn4y-SEyGFiwbNlS7EScaVTMgSOVhuq2kUBwoaMX0KqdYSIdGRHfI7zpi7nm5ciPZVlS2cdTOb_xEeWVma4KVdGt2T2DmvkNFTIuWqFpgx8Fe5maN9TCPI/s1600/Android-15-DP1-Social%20%281%29.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDDCgXcu5EI9w514aJNVe4C1CciGCHkKn8lWUyaa_TK-HspfRAKoKvDAiMTbGZ-Y406y9W5sn4y-SEyGFiwbNlS7EScaVTMgSOVhuq2kUBwoaMX0KqdYSIdGRHfI7zpi7nm5ciPZVlS2cdTOb_xEeWVma4KVdGt2T2DmvkNFTIuWqFpgx8Fe5maN9TCPI/s1600/Android-15-DP1-Social%20%281%29.png" style="display: none;" /> <em> Posted by <a href="https://twitter.com/davey_burke" target="_blank">Dave Burke</a>, VP of Engineering </em> <div class="separator" style="border: 0px; clear: both; float: right; padding: 0px; width: 45%;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Android 14 logo" border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" width="320" /></a></div> <p>We're releasing the first Developer Preview of Android 15 today so you, our developers, can collaborate with us to build a better Android.</p> <p>Android 15 continues our work to build a platform that helps improve your productivity while giving you new capabilities to produce superior media experiences, minimize battery impact, maximize smooth app performance, and protect user privacy and security all on the most diverse lineup of devices out there.</p> <p>Android enables your apps to take advantage of premium device hardware, including high-end camera capabilities, powerful GPUs, dazzling displays, and AI processing. The demand for large-screen devices, including tablets, foldables and flippables, continues to grow, offering an opportunity to reach high-value users. Also, Android is committed to providing tooling and libraries to help your apps take advantage of the latest advances in AI.</p> <p>Your feedback on the Android 15 Developer Preview and QPR beta program plays a key role in helping Android continuously improve. The <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a> has more information about the preview, including downloads for Pixel and detailed documentation about changes. This preview is just the beginning, and we’ll have lots more to share as we move through the release cycle. Thank you in advance for your help in making Android a platform that works for everyone.</p> <h3><span style="font-size: x-large;">Protecting user privacy and security</span></h3> <p>Android is constantly working to create solutions that maximize user privacy and security.</p> <h3><span style="font-size: large;">Privacy Sandbox on Android</span></h3> <p>Android 15 brings Android AD Services up to extension level 10, incorporating the latest version of the <a href="https://developer.android.com/design-for-safety/privacy-sandbox" target="_blank">Privacy Sandbox on Android</a>, part of our work to develop new technologies that improve user privacy and enable effective, personalized advertising experiences for mobile apps. Our <a href="https://developer.android.com/design-for-safety/privacy-sandbox/program-overview" target="_blank">website has more</a> about the Privacy Sandbox on Android developer preview and beta programs to help you get started.</p> <h3><span style="font-size: large;">Health Connect</span></h3> <p>Android 15 integrates Android 14 extensions 10 around <a href="https://developer.android.com/health-and-fitness/guides/health-connect/develop/get-started" target="_blank">Health Connect by Android</a>, a secure and centralized platform to manage and share app-collected health and fitness data. This update adds support for new data types across <a href="https://developer.android.com/reference/android/health/connect/datatypes/StepsCadenceRecord#STEPS_CADENCE_RATE_AVG" target="_blank">fitness</a>, <a href="https://developer.android.com/reference/android/health/connect/datatypes/NutritionRecord#TRANS_FAT_TOTAL" target="_blank">nutrition</a>, and more.</p> <h3><span style="font-size: large;">File integrity</span></h3> <p>Android 15's <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/security/FileIntegrityManager" target="_blank">FileIntegrityManager</a></span> includes new APIs that tap into the power of the <a href="https://docs.kernel.org/filesystems/fsverity.html" target="_blank">fs-verity</a> feature in the Linux kernel. With fs-verity, files can be <a href="https://developer.android.com/reference/android/security/FileIntegrityManager#setupFsVerity%28java.io.File%29" target="_blank">protected by custom cryptographic signatures</a>, helping you <a href="https://developer.android.com/reference/android/security/FileIntegrityManager#getFsVerityDigest%28java.io.File%29" target="_blank">ensure they haven't been tampered with or corrupted</a>. This leads to enhanced security, protecting against potential malware or unauthorized file modifications that could compromise your app's functionality or data.</p> <h3><span style="font-size: large;">Partial screen sharing</span></h3> <p>Android 15 supports partial screen sharing so users can share or record just an app window rather than the entire device screen. This feature, enabled first in Android 14 QPR2, includes <span style="font-family: Courier;"><a href="https://developer.android.com/about/versions/14/features/partial-screen-sharing#media_projection_callbacks" target="_blank"> MediaProjection</span> callbacks</a> that allow your app to customize the partial screen sharing experience. Note that <a href="https://developer.android.com/about/versions/14/behavior-changes-14#media-projection-consent" target="_blank">user consent is now required</a> for each <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/media/projection/MediaProjection" target="_blank">MediaProjection</a></span> capture session.</p> <h3><span style="font-size: x-large;">Supporting creators</span></h3> <p>Android continues its work to give you access to tools and hardware to support creators to bring their vision to life on Android.</p> <h3><span style="font-size: large;">In-app Camera Controls</span></h3> <p>Android 15 adds new extensions for more control over the camera hardware and its algorithms on supported devices:</p> <ul><ul> <li><b>Low light enhancements</b> that give developers control to <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics#CONTROL_LOW_LIGHT_BOOST_INFO_LUMINANCE_RANGE" target="_blank">boost the brightness of the camera preview.</a></li></ul><ul> <li><b>Advanced flash strength adjustments</b> enabling precise control of flash intensity in both <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics#FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL" target="_blank">SINGLE</a> and <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics#FLASH_TORCH_STRENGTH_DEFAULT_LEVEL" target="_blank">TORCH</a> modes while capturing images.</li> </ul></ul> <h3><span style="font-size: large;">Virtual MIDI 2.0 Devices</span></h3> <p>Android 13 added support for connecting to <a href="https://developer.android.com/reference/android/media/midi/package-summary" target="_blank">MIDI 2.0 devices via USB</a>, which communicate using Universal MIDI Packets (UMP). Android 15 extends <a href="https://developer.android.com/reference/android/media/midi/MidiUmpDeviceService" target="_blank">UMP support to virtual MIDI apps</a>, enabling composition apps to control synthesizer apps as a virtual MIDI 2.0 device just like they would with an USB MIDI 2.0 device.</p> <h3><span style="font-size: x-large;">Performance and quality</span></h3> <p>Android continues its focus on helping you improve the quality of your apps. Much of this focus is around tooling and libraries, including <a href="https://developer.android.com/jetpack/compose" target="_blank">Jetpack Compose</a>, <a href="https://developer.android.com/studio" target="_blank">Android Studio</a>, and more.</p> <h3><span style="font-size: large;">Dynamic Performance</span></h3> <p>Android 15 continues our investment in the <a href="https://developer.android.com/games/optimize/adpf" target="_blank">Android Dynamic Performance Framework (ADPF)</a>, a set of APIs that allow games and performance intensive apps to interact more directly with power and thermal systems of Android devices. On supported devices, Android 15 will add new ADPF capabilities:</p> <ul><ul> <li><b>A <a href="https://developer.android.com/reference/android/os/PerformanceHintManager.Session#setPreferPowerEfficiency%28boolean%29" target="_blank">power-efficiency mode</a></b> for hint sessions to indicate that their associated threads should prefer power saving over performance, great for long-running background workloads.</li></ul><ul> <li><b>GPU and CPU work durations</b> can both be <a href="https://developer.android.com/reference/android/os/PerformanceHintManager.Session#reportActualWorkDuration%28android.os.WorkDuration%29" target="_blank">reported</a> in hint sessions, allowing the system to adjust CPU and GPU frequencies together to best meet workload demands.</li></ul><ul> <li><b><a href="https://developer.android.com/reference/android/os/PowerManager#getThermalHeadroomThresholds%28%29" target="_blank">Thermal headroom thresholds</a></b> to interpret possible thermal throttling status based on headroom prediction.</li> </ul></ul> <p>To learn more about how to use ADPF in your apps and games, <a href="https://developer.android.com/games/optimize/adpf" target="_blank">head over to the documentation</a>.</p> <h3><span style="font-size: x-large;">Developer Productivity</span></h3> <p>Android 15 continues to add OpenJDK APIs, including quality-of-life improvements around <a href="https://developer.android.com/reference/java/nio/ByteBuffer#get%28int,%20byte[]%29" target="_blank">NIO buffers</a>, <a href="https://developer.android.com/reference/java/util/stream/DoubleStream.DoubleMapMultiConsumer" target="_blank">streams</a>, <a href="https://developer.android.com/reference/javax/security/auth/x500/X500PrivateCredential" target="_blank">security</a>, and more. These APIs are updated on <a href="https://android-developers.googleblog.com/2023/11/the-secret-to-androids-improved-memory-latest-android-runtime-update.html" target="_blank">over a billion devices running Android 12+ through Google Play System updates</a>, so you can target the latest programming features.</p> <h3><span style="font-size: x-large;">App compatibility</span></h3> <image><div style="text-align: center;"><img alt="Image of Android 15 Development timeline, indicating we are on time with Developer Previews in February" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjorrv3MG899Rr4AvPI0rRj3UrXpg_O2qDcKpCXekB11JGPO5hDJgqUvvy9aZ10eusam_4cNx8zzRb8rfCv1pRsgkSWH1yFuUTr-G97i8u4SrsBey8KzWdeJi1lUpXSq7x52hoApa2GNCnSfFjeMN4eEwFasWb1IaO8rAZFJYqY9mcC7uj1b4ncp1EQzyY/s1600/image2.png" width="100%" /></div></image><br /> <p>To give you more time to plan for app compatibility work, we’re letting you know our Platform Stability milestone well in advance.</p> <p>At this milestone, we’ll deliver final SDK/NDK APIs and also final internal APIs and app-facing system behaviors. We’re expecting to reach Platform Stability in June 2024, and from that time you’ll have several months before the official release to do your final testing. The release timeline details are <a href="https://developer.android.com/about/versions/15/overview#timeline" target="_blank">here</a>.</p> <h2><span style="font-size: x-large;">Get started with Android 15</span></h2> <p>The Developer Preview has everything you need to try the Android 15 features, test your apps, and give us feedback. You can get started today by <a href="https://developer.android.com/about/versions/15/get#pixel_flash_install" target="_blank">flashing a system image</a> onto a Pixel 6, 7, or 8 series device, along with the Pixel Fold and Pixel Tablet. If you don’t have a Pixel device, you can <a href="https://developer.android.com/about/versions/15/get#on_emulator" target="_blank">use the 64-bit system images with the Android Emulator</a> in Android Studio.</p> <p>For the best development experience with Android 15, we recommend that you use the <a href="https://developer.android.com/studio/preview" target="_blank">latest preview of Android Studio Jellyfish</a> (or more recent Jellyfish+ versions). Once you’re set up, here are some of the things you should do:</p> <ul><ul> <li>Try the new features and APIs ? your feedback is critical during the early part of the developer preview. Report issues in our tracker on the <a href="https://developer.android.com/about/versions/15/feedback" target="_blank">feedback page</a>.</li></ul><ul> <li>Test your current app for compatibility ? learn whether your app is affected by changes in Android 15; install your app onto a device or emulator running Android 15 and extensively test it.</li> </ul></ul> <p>We’ll update the preview system images and SDK regularly throughout the Android 15 release cycle. This initial preview release is for developers only and not intended for daily or consumer use, so we're making it available by manual download only. Once you’ve manually installed a preview build, you’ll automatically get future updates over-the-air for all later previews and Betas. Read more <a href="https://developer.android.com/about/versions/15/overview#pixel" target="_blank">here</a>.</p> <p>If you intend to move from the <a href="https://developer.android.com/about/versions/14/get-qpr" target="_blank">Android 14 QPR Beta program</a> to the Android 15 Developer Preview program and don't want to have to wipe your device, we recommend that you move to Developer Preview 1 now. Otherwise you may run into time periods where the Android 14 Beta will have a more recent build date which will prevent you from going directly to the Android 15 Developer Preview without doing a data wipe.</p> <p>As we reach our Beta releases, we'll be inviting consumers to try Android 15 as well, and we'll open up enrollment for the Android Beta program at that time. For now, please note that the Android Beta program is not yet available for Android 15.</p> <p>For complete information, visit the <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a>.</p><br /> <p><small><em>Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.</em></small></p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-4836896455140594023 2024-02-14T09:00:00.000-08:00 2024-02-14T09:03:32.236-08:00 #WeArePlay | How two sea turtle enthusiasts are revolutionizing marine conservation <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu218W2RyLDMAvOEcTDjLxA2tjNEFk6822pJCEX1uklhlS4xpUn4A5pQbmDLsnUgOC_Vfzy1stegKYeBgy0jdWOCimNm_I9eTkUg1l5lJRk0ASIaaZxda23M1MU6HvxT5yLhxzdzNMCRU3j457Tn6g7RLBLWs7sAvwCa3u0ytAAt_WUpmpGRM-HCmzGjA/s1600/%23WeArePlay%20Social%20.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu218W2RyLDMAvOEcTDjLxA2tjNEFk6822pJCEX1uklhlS4xpUn4A5pQbmDLsnUgOC_Vfzy1stegKYeBgy0jdWOCimNm_I9eTkUg1l5lJRk0ASIaaZxda23M1MU6HvxT5yLhxzdzNMCRU3j457Tn6g7RLBLWs7sAvwCa3u0ytAAt_WUpmpGRM-HCmzGjA/s1600/%23WeArePlay%20Social%20.png" style="display: none;" /> <em>Posted by Leticia Lago ? Developer Marketing</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfkoyiV0Ohxbe89HXqSsLkj4WD8ADd5AmwhHRv4MyMdbrm11cE1wn-SnjSYjsmWupfwZDt6FhaV_-kWQJ1AdObLCTglDqkO1V_Uo6z7S14NpYbQyWzxaDNOMK3fEa2_k25zNk-kQIkDI21X8YjGyoKu-Nnuptx1YYyd6nXmIxC4bPJQl0iHBj2dMD2nI4/s1600/%23WeArePlay%20Banner.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfkoyiV0Ohxbe89HXqSsLkj4WD8ADd5AmwhHRv4MyMdbrm11cE1wn-SnjSYjsmWupfwZDt6FhaV_-kWQJ1AdObLCTglDqkO1V_Uo6z7S14NpYbQyWzxaDNOMK3fEa2_k25zNk-kQIkDI21X8YjGyoKu-Nnuptx1YYyd6nXmIxC4bPJQl0iHBj2dMD2nI4/s1600/%23WeArePlay%20Banner.png" /></a> <a name='more'></a><p></p> <iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="CfzhLOiczDQ" width="100%" height="400" src="https://www.youtube.com/embed/CfzhLOiczDQ"></iframe> <p>When environmental science student Caitlin returned home from a trip monitoring sea turtles in Western Australia, she was inspired to create a conservation tool that could improve tracking of the species. She connected with a French developer and fellow marine life enthusiast Nicolas to design their app <a href="https://play.google.com/store/apps/details?id=fr.altplusun.we_spot_turtles&amp;hl=en&amp;gl=US" target="_blank">We Spot Turtles!</a>, allowing anyone to support tracking efforts by uploading pictures of them spotted in the wild.</p> <p>Caitlin and Nicolas shared their journey in our latest film for <a href="https://play.google.com/console/about/weareplay/" target="_blank">#WeArePlay</a>, which showcases the amazing stories behind apps and games on Google Play. We caught up with the pair to find out more about their passion and how they are making strides towards advancing sea turtle conservation. </p> <h4><span style="font-size: large;">Tell us about how you both got interested in sea turtle conservation?</span></h4> <p><b>Caitlin:</b> A few years ago, I did a sea turtle monitoring program for the Department of Biodiversity, Conservation and Attractions in Western Australia. It was probably one of the most magical experiences of my life. After that, I decided I only really wanted to work with sea turtles.</p> <p><b>Nicolas:</b> In 2010, in French Polynesia, I volunteered with a sea turtle protection project. I was moved by the experience, and when I came back to France, I knew I wanted to use my tech background to create something inspired by the trip.</p> <h4><span style="font-size: large;">How did these experiences lead you to create We Spot Turtles!?</span></h4> <p><b>Caitlin:</b> There are seven species of sea turtle, and all are critically endangered. Or rather there’s not enough data on them to inform an accurate endangerment status. This means the needs of the species are going unmet and sea turtles are silently going extinct. Our inspiration is essentially to better track sea turtles so that conservation can be improved. </p> <p><b>Nicolas:</b> When I returned to France after monitoring sea turtles, I knew I wanted to make an app inspired by my experience. However, I had put the project on hold for a while. Then, when a friend sent me Caitlin’s social media post looking for a developer for a sea turtle conservation app, it re-ignited my inspiration, and we teamed up to make it together.</p> <image><div style="text-align: center;"><img id="imgFull" alt="close up image of a turtle resting in a reef underwater" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3dDXPA6FttMfzWiVw9cIXMWzS-Nzd_NWfDLUnjnShQV9rSVRnp1sJIaboQNG7z_nWrNfWjFrfu3KotnVb549sKwmH7m3adi873ADr11snns0Hg8Ew72jwTpLPuG2WNbgEMH0l62-sBXK0soMmUgtrak5EEyDRwCKrI79rSqHCvHVCqb5RXGog0aoi2XY/s1600/image3.png" width="100%"/></div></image> <h4><span style="font-size: large;">What does We Spot Turtles! do?</span></h4> <p><b>Caitlin:</b> Essentially, members of the public upload images of sea turtles they spot ? and even get to name them. Then, the app automatically geolocates, giving us a date and timestamp of when and where the sea turtle was located. This allows us to track turtles and improve our conservation efforts.</p> <h4><span style="font-size: large;">How do you use artificial intelligence in the app?</span></h4> <p><b>Caitlin:</b> The advancements in AI in recent years have given us the opportunity to make a bigger impact than we would have been able to otherwise. The machine learning model that Nicolas created uses the facial scale and pigmentations of the turtles to not only identify its species, but also to give that sea turtle a unique code for tracking purposes. Then, if it is photographed by someone else in the future, we can see on the app where it's been spotted before.</p> <h4><span style="font-size: large;">How has Google Play supported your journey?</span></h4> <p><b>Caitlin:</b> Launching our app on Google Play has allowed us to reach a global audience. We now have communities in Exmouth in Western Australia, Manly Beach in Sydney, and have 6 countries in total using our app already. Without Google Play, we wouldn't have the ability to connect on such a global scale.</p> <p><b>Nicolas:</b> I’m a mobile application developer and I use Google’s Flutter framework. I knew Google Play was a good place to release our title as it easily allows us to work on the platform. As a result, we’ve been able to make the app great.</p> <image><div style="text-align: center;"><img id="imgFull" alt="Photo pf Caitlin and Nicolas on the bach in Australia at sunset. Both are kneeling in the sand. Caitlin is using her phone to identify something in the distance, and gesturing to Nicolas who is looking in the same direction" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4oAr8typ6jmDgb9oFV6f0AwCnp6vItKolavM-MGc-8nZCgaajFILzRDzMmN1OZNrTXUTxzwiGwKI8padd_Zl-HcGq-BaYm6EH8br4zSvH9hufBq0eHcOzSid_F6Qv3WiMTGZwzbx_pqdJCotyFGCWUmS0f4MJ4pg4iAxgODF3_DkVfakEprPwSnsTHqw/s1600/unnamed%20%2812%29.jpg" width="100%"/></div></image> <h4><span style="font-size: large;">What do you hope to achieve with We Spot Turtles!?</span></h4> <p><b>Caitlin:</b> We Spot Turtles! puts data collection in the hands of the people. It’s giving everyone the opportunity to make an impact in sea turtle conservation. Because of this, we believe that we can massively alter and redefine conservation efforts and enhance people’s engagement with the natural world.</p> <h4><span style="font-size: large;">What are your plans for the future?</span></h4> <p><b>Caitlin:</b> Nicolas and I have some big plans. We want to branch out into other species. We'd love to do whale sharks, birds, and red pandas. Ultimately, we want to achieve our goal of improving the conservation of various species and animals around the world. </p><br/> <p>Discover other inspiring app and game founders featured in <a href="https://play.google.com/console/about/weareplay/" target="_blank">#WeArePlay</a>.</p> <br /><br /> <p></p><center> How useful did you find this blog post? </center><p></p> <p></p><center> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> </center><p></p> <div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s260/lockup_ic_Google_Play_H_260x53px_clr.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="53" data-original-width="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s200/lockup_ic_Google_Play_H_260x53px_clr.png" width="200" /></a></div> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0 tag:blogger.com,1999:blog-6755709643044947179.post-4959364373432172231 2024-02-13T09:00:00.000-08:00 2024-02-13T09:00:00.128-08:00 Cloud photos now available in the Android photo picker <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBQ5LxLRpc0YSVGD1WcneUtl1bT-ieccmHkAh0rKAxWgRnm_8iUeDqpOXhJaESAuskzqGO8Z8fxMbqO1WezffgdJEPKPCBpKtCnta07ISgTq0pZ_dHEyZTNY30w8K6gs3Oa1Ep9iYW7SbpGS0w1pdlQDfie9n5HTh8EiswgcbDPOWWK_eJ15IAd9H2-4c/s1600/social-Cloud-photos-now-available-in-the-Android-photo-picker.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBQ5LxLRpc0YSVGD1WcneUtl1bT-ieccmHkAh0rKAxWgRnm_8iUeDqpOXhJaESAuskzqGO8Z8fxMbqO1WezffgdJEPKPCBpKtCnta07ISgTq0pZ_dHEyZTNY30w8K6gs3Oa1Ep9iYW7SbpGS0w1pdlQDfie9n5HTh8EiswgcbDPOWWK_eJ15IAd9H2-4c/s1600/social-Cloud-photos-now-available-in-the-Android-photo-picker.png" style="display: none;" /> <em>Posted by Roxanna Aliabadi Walker ? Product Manager</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2qtvzDbbpQYf6oabNpfi_xV8ruIeWVieC4DPGUjuhHDgIi_nXKtzLqIIskpCGHDrWJsf9fMzkjOJwmPKlYg-Xxe6CimjzeLtlQ-VH6six6aTp7Dkw2EsYPil6iyHZ2uZSuD_sbhTBVogXn55dwkoFmfce6a-w4lsXQ4O6Twbaj2kOyEebL2o4m3mh3Z4/s1600/header-Cloud-photos-now-available-in-the-Android-photo-picker.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2qtvzDbbpQYf6oabNpfi_xV8ruIeWVieC4DPGUjuhHDgIi_nXKtzLqIIskpCGHDrWJsf9fMzkjOJwmPKlYg-Xxe6CimjzeLtlQ-VH6six6aTp7Dkw2EsYPil6iyHZ2uZSuD_sbhTBVogXn55dwkoFmfce6a-w4lsXQ4O6Twbaj2kOyEebL2o4m3mh3Z4/s1600/header-Cloud-photos-now-available-in-the-Android-photo-picker.png" /></a> <h2>Available now with Google Photos</h2> <p>Our photo picker has always been the gateway to your local media library, providing a secure, date-sorted interface for users to grant apps access to selected images and videos. But now, we're taking it a step further by integrating cloud photos from your chosen cloud media app directly into the photo picker experience.</p> <image><div style="text-align: center;"><img alt="Moving image of the photo picker access" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGHAB8sdmGvT9ly9YMYMQdE9xVHKrgu_CeZMBIlWAIlUbyzapQmhc2xPT1uRxH1El2UoYWXTM3goBjLbHz4dPOphia_UJnWd3cogWRW7QALorWnIS5Oymdc7tTktlfi1pdP4eFjPbUxhaKabuWvYFmIo4rW2J-2zORBt4hnkoGAGHtxQGVx45DbJjd0BU/s1600/image2.gif" width="40%" /></div></image> <h3>Unifying your media library</h3> <p>Backed-up photos, also known as "cloud photos," will now be merged with your local ones in the photo picker, eliminating the need to switch between apps. Additionally, any albums you've created in your cloud storage app will be readily accessible within the photo picker's albums tab. If your cloud media provider has a concept of “favorites,” they will be showcased prominently within the albums tab of the photo picker for easy access. This feature is currently rolling out with the February <a href="https://support.google.com/product-documentation/answer/11462338" target="_blank">Google System Update</a> to devices running Android 12 and above.</p> <h3>Available now with Google Photos, but open to all</h3> <p>Google Photos is already supporting this new feature, and our APIs are open to any cloud media app that qualifies for our <a href="https://developer.android.com/guide/topics/providers/cloud-media-provider#eligibility" target="_blank">pilot program</a>. Our goal is to make accessing your lifetime of memories effortless, regardless of the app you prefer.</p> <p>The Android photo picker will attempt to auto-select a cloud media app for you, but you can change or remove your selected cloud media app at any time from photo picker settings.</p> <image><div style="text-align: center;"><img alt="Image of Cloud media settings in photo picker settings" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXyy2UZb-JKDSR0Whhi7fImAYHaAxTtnqA1gGfWCESzZ8WJsH-7X_Yd0fsg965WSrnb612yIA2eIsvapfmEg7aBUM2j8HbLGfyGjr_KN-TTij08WuXdLsCN7ewZW6G5i-5QyhKl7nRuGhSVSV8a7r310j3YiuKjyCcKNA4AfxzheJCHZPjDUl_ByXsgoY/s1600/image1.png" width="40%" /></div></image> <h3>Migrate today for an enhanced, frictionless experience</h3> <p>The Android photo picker substantially reduces friction by not requiring any runtime permissions. If you switch from using a custom photo picker to the Android photo picker, you can offer this enhanced experience with cloud photos to your users, as well as reduce or entirely eliminate the overhead involved with acquiring and managing access to photos on the device. (Note that apps without a need for persistent and/or broad scale access to photos - for example - to set a profile picture, must adopt the Android photo picker in lieu of any sensitive file permissions to adhere to <a href="https://support.google.com/googleplay/android-developer/answer/14115180?hl=en" target="_blank">Google Play policy</a>).</p> <p>The photo picker has been backported to Android 4.4 to make it easy to migrate without needing to worry about device compatibility. Access to cloud content will only be available for users running Android 12 and higher, but developers do not need to consider this when implementing the photo picker into their apps. To use the photo picker in your app, update the ActivityX dependency to version 1.7.x or above and add the following code snippet:</p> <!--HTML generated using hilite.me--><div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="color: #666666; font-family: courier;"><span>//</span> Registers a photo picker activity launcher in single<span>-</span><span>select</span> mode<span>.</span> val pickMedia <span>=</span> registerForActivityResult(PickVisualMedia()) { uri <span>-&gt;</span> <span>//</span> Callback is invoked after the user selects a media item <span>or</span> closes the <span>//</span> photo picker<span>.</span> <span>if</span> (uri <span>!=</span> null) { <span>Log</span><span>.</span>d(<span>"PhotoPicker"</span>, <span>"Selected URI: $uri"</span>) } <span>else</span> { <span>Log</span><span>.</span>d(<span>"PhotoPicker"</span>, <span>"No media selected"</span>) } } <span>//</span> Launch the photo picker <span>and</span> let the user choose images <span>and</span> videos<span>.</span> pickMedia<span>.</span>launch(PickVisualMediaRequest(PickVisualMedia<span>.</span>ImageAndVideo)) <span>//</span> Launch the photo picker <span>and</span> let the user choose only images<span>.</span> pickMedia<span>.</span>launch(PickVisualMediaRequest(PickVisualMedia<span>.</span>ImageOnly)) <span>//</span> Launch the photo picker <span>and</span> let the user choose only videos<span>.</span> pickMedia<span>.</span>launch(PickVisualMediaRequest(PickVisualMedia<span>.</span>VideoOnly))</span> </pre></div> <p>More customization options are listed in our <a href="https://developer.android.com/training/data-storage/shared/photopicker" target="_blank">developer documentation</a>. </p> Android Developers http://www.blogger.com/profile/08588467489110681140 noreply@blogger.com 0
- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본