Thursday, March 28, 2019

The Latest Android App Bundle Updates Including The Additional Languages API

Posted by Wojtek KaliciƄski, Developer Advocate, Android

Last year, we launched Android App Bundles and Google Play's Dynamic Delivery to introduce modular development, reduce app size and streamline the release process. Since then, we've seen developers quickly adopt this new app model in over 60,000 production apps. We've been excited to see developers experience significant app size savings and reductions in the time needed to manage each release, and have documented these benefits in case studies with Duolingo and redBus.

Thank you to everyone who took the time to give us feedback on our initial launch. We're always open to new ideas, and today, we're happy to announce some new improvements based on your suggestions:

  • A new additional languages install API, which supports in-app language pickers
  • A streamlined publishing process for instant-enabled app bundles
  • A new enrollment option for app signing by Google Play
  • The ability to permanently uninstall dynamic feature modules that are included in your app's initial install


Additional languages API

When you adopt the Android App Bundle as the publishing format for your app, Google Play is able to optimize the installation by delivering only the language resources that match the device's system locales. If a user changes the system locale after the app is installed, Play automatically downloads the required resources.

Some developers choose to decouple the app's display language from the system locale by adding an in-app language switcher. With the latest release of the Play Core library (version 1.4.0), we're introducing a new additional languages API that makes it possible to build in-app language pickers while retaining the full benefits of smaller installs provided by using app bundles.

With the additional languages API, apps can now request the Play Store to install resources for a new language configuration on demand and immediately start using it.

Get a list of installed languages

The app can get a list of languages that are already installed using the SplitInstallManager#getInstalledLanguages() method.

val splitInstallManager = SplitInstallManagerFactory.create(context) val langs: Set<String> = splitInstallManager.installedLanguages

Requesting additional languages

Requesting an additional language is similar to requesting an on demand module. You can do this by specifying a language in the request through SplitInstallRequest.Builder#addLanguage(java.util.Locale).

val installRequestBuilder = SplitInstallRequest.newBuilder() installRequestBuilder.addLanguage(Locale.forLanguageTag("pl")) splitInstallManager.startInstall(installRequestBuilder.build())

The app can also monitor install success with callbacks and monitor the download state with a listener, just like when requesting an on demand module.

Remember to handle the SplitInstallSessionStatus.REQUIRES_USER_CONFIRMATION state. Please note that there was an API change in a recent Play Core release, which means you should use the new SplitInstallManager#startConfirmationDialogForResult() together with Activity#onActivityResult(). The previous method of using SplitInstallSessionState#resolutionIntent() with startIntentSender() has been deprecated.

Check out the updated Play Core Library documentation for more information on how to access the newly installed language resources in your activity.

We've also updated our dynamic features sample on GitHub with the additional languages API, including how to store the user's language preference and apply it to your activities at startup.

Please note that while the additional languages API is now available to all developers, on demand modules are in a closed beta for the time being. You can experiment with on demand modules in your internal, open, and closed test tracks, while we work with our partners to make sure this feature is ready for production apps.

Instant-enabled App Bundle

In Android Studio 3.3, we introduced a way to build app bundles that contain both the regular, installed version of your app as well as a Google Play Instant experience for modules marked with the dist:instant="true" attribute in their AndroidManifest.xml:

<manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">     <dist:module dist:instant="true" />     ... </manifest>

Even though you could use a single project to generate the installed and instant versions of your app, up until now, developers were still required to use product flavors in order to build two separate app bundles and upload both to Play.

We're happy to announce that we have now removed this restriction. It's now possible to upload a single, unified app bundle artifact, containing modules enabled for the instant experience. This functionality is now available for everyone.

After you build an instant-enabled app bundle, upload it to any track on the Play Console, and you'll be able to select it when creating a new instant app release. This also means that the installed and instant versions of your app no longer need different version codes, which will simplify the release workflow.

Opt in to app signing by Google Play

You need to enable app signing by Google Play to publish your app using an Android App Bundle and automatically benefit from Dynamic Delivery optimizations. It is also a more secure way to manage your signing key, which we recommend to everyone, even if you want to keep publishing regular APKs for now.

Based on your feedback, we've revamped the sign-up flow for new apps to make it easier to initialize the key you want to use for signing your app.

Now developers can explicitly choose to upload their existing key without needing to upload a self-signed artifact first. You can also choose to start with a key generated by Google Play, so that the key used to locally sign your app bundle can become your upload key.

Read more about the new flow.

Permanent uninstallation of install time modules

We have now added the ability to permanently uninstall dynamic feature modules that are included in your app's initial install.

This is a behavior change, which means you can now call the existing SplitInstallManager#deferredUninstall() API on modules that set onDemand="false". The module will be permanently uninstalled, even when the app is updated.

This opens up new possibilities for developers to further reduce the installed app size. For example, you can now uninstall a heavy sign-up module or any other onboarding content once the user completes it. If the user navigates to a section of your app that has been uninstalled, you can reinstall it using the standard on demand modules install API.

We hope you enjoy these improvements and test them out in your apps. Continue to share your feedback as we work to make these features even more useful for you!

How useful did you find this blog post?

Puppet Steve Tries To Tap Into The E3 "Hype"

You guys have a good E3? I did at least.
Excited that Kingdom Hearts III finally has a release date. It's been five and a half years... I should replay the PS4 collections in preparation
Absolutely elated that the true Tales of Vesperia is finally coming over, and it's not exclusive. Yes, that one Namco.
I'm actually excited for an Assassin's Creed game. It looks different enough that I'm interested. Hope it doesn't suck.
No idea what Babylon's Fall will be, but more titles from PlatinumGames are always good.
September is gonna break me with Dragon Quest XI and Spider-Man.
Death Stranding... I think I have an idea of what it is? Though Sony's lack of release dates for a lot of their big titles is worrisome... Like their treatment of crossplay.
And of course, the showstopper that is Super Smash Bros Ultimate. Which is the subject of today's post!

Instead of Chris using his established gamer persona to talk about E3, he uses Puppet Steve instead. Oh good...
Posted last night. At least he was actually timely about it.
Super Smash Bros Ultimate Nintendo Switch E3 Full Reveal! Complete Roster New Fighters Amiibo 2018

Of course he's gotta stick that amiibo in there. Because fuck the actual game.
It's six minutes long. ... Okay.

Fake over-excitement. His wobbly table has a bunch of amiibo on it. Why not a Nintendo Swi- oh wait I don't think he even has a Switch. Too much money spent on FNAF crap I imagine.
Of course this is gonna be about CHARACTERS! And he claims they added a ton of new ones. No they didn't, they only added three (so far). Inkling, Daisy, and Ridley.
Apparently the first "new" character is the Pokemon Trainer, who he refers to as Ash Ketchum. That's not Ash, that's Red. He's very different, in that he's competent. Also, he's not a new character, he's returning from Brawl.
"You can play as all kinds of Pokemon like Charizard, Ivysaur, Squirtle, and more" Uhh no, just those three. Pokemon Trainer can only control those three. There are other Pokemon in the game, but they're not controlled by the trainer. They stand alone. Unless that's what you mean, but you're not very good at conveying your points.
Brings up the Inkling. "This brings in a lot of fun because you can play as the girl or the boy! Oh yes!" ... You have a weird idea of fun.
"There are over 8 different characters you can play in all?" As he shows all the Inkling variations. Those aren't new characters, they're different costumes. There is only one Inkling, and you can change their costume to fit your preference, or if you do an 8-player battle with only Inklings. How do you not get this?

And he continues to think there's "more characters" because of the Villager and how there's 8 different ones. Again, costumes. He also thinks they "added" this. No, this was in the last game. I know damn well you played the last game, I saw that video. You can't possibly be this ignorant. Yet somehow he is.
He's also surprised at female Pikachus. Yes Chris, gendered Pokemon have been thing since Gen 2, and the heart-tail has been a thing since Gen 4. You'd know this if you were an actual Pokemon fan and not just pretending to be one.
At least he brings up the actual other new characters with Daisy and Ridley. Doesn't say much. Just that Daisy's Toad is blue compared to Peach's red Toad and that Ridley is going to kick butt.

And then... he proceeds to list every character. Over 60 of them. Why? Just why?
He mispronounces Ryu of course... doing the RYE-YOO pronunciation.
As well as Lucina, saying it as "Lucinda".
Palutena is mispronounced. That might just be an accent thing though.
What's weird is that he considers Sonic, Pac-Man and Mega Man as guest fighters, but lists Ryu and Bayonetta as if they're Nintendo characters and not guests. Capcom and Sega characters Chris. It's not hard.
He finally stops, drops a "super cool"

And then he shows the release date of December 7th, while saying September. You edited this Chris. You edited this and (hopefully) did multiple takes. How did you screw that up? It's right there on the screen!

He brings up the new Final Smashes. "Sonic turns into his golden form" Which he could always do since Brawl, only now it's a lot faster.
The only thing he says about the stages is the "graphically upgrades". Nothing about how they're all getting Battlefield variants. Though that would require Chris to understand the intricacies of this series, and he never will.
"Link's got his blue suit" That's the Champion's Tunic from Breath of the Wild, making it very clear you haven't bothered to play that. Then again, what's the point when there's crappy toys to show off?

"EASTER EGGS" Uh huh...
He talks about Assist Trophies, acting like they're new. Nope, been a thing since Brawl.
"Waluigi, Knuckle Joe, the Pac-Man Ghosts" None are new, all have been in past games.
"Protoman and Bass" Not assist trophies, just a part of Mega Man's Final Smash now. Also, he mispronounces Bass. He pronounces it like the fish, not the guitar. Yes I know Mega Man 8 uses the fish way but it's clearly meant to coincide with the musical motif the series has.
Lists more... I'm surprised he brought up Jeff from Earthbound. That seems like something way too obscure for him.
Of course he gushes over Bomberman as an assist trophy, and is annoyed he's not playable. My informant told me he also mentions that on Facebook and still wants Simon Belmont too. Wonder if he still thinks they're Nintendo characters.

Onto the amiibo. He just wants more.
Well there will be more, we know Inkling, Ridley and Daisy are confirmed. No word on the returning fighters but I imagine we'll see them.
He also wants new poses. Oh fuck nooooooo. At most we'll get reprints of the original Smash line. Not to mention a lot of these characters have "different poses" from different lines. Link has like 10 different amiibo.
He also believe there will be a lot more characters announced. Did you not pay attention to what Sakurai said? He said there won't be a lot of new additions, because the roster is already massive. 68 characters already. At most we'll probably get up to 70.

Yeah that was dumb. Could have shaved like 3 minutes without the padding and if he did proper research and realized many of those "new characters" aren't new or even characters. I'm just amazed at the ignorance. God I hope kids aren't getting information from this...

Think "Chris Neo" will do E3 coverage? We'll see. He inexplicably skipped last week. If there's a reason I didn't hear it from my informant.

But man, Puppet Steve is a mess of a channel. Before the Smash video, he spammed NINE FNAF videos. Are you serious?! It must be paying off for him to do that. Does YouTube still do the audience retention thing? Spamming videos only works if the audience watches each one all the way through (and DarkSideDave still doesn't get that).
His latest is a video on Minecraft Fun...ko... Pop. Oooooh god, that's like 20 different kinds of cancerous cringe. I don't think so.

Enjoy the rest of E3 everyone.

How We Fought Bad Apps And Malicious Developers In 2018

Posted by Andrew Ahn, Product Manager, Google Play

Google Play is committed to providing a secure and safe platform for billions of Android users on their journey discovering and experiencing the apps they love and enjoy. To deliver against this commitment, we worked last year to improve our abuse detection technologies and systems, and significantly increased our team of product managers, engineers, policy experts, and operations leaders to fight against bad actors.

In 2018, we introduced a series of new policies to protect users from new abuse trends, detected and removed malicious developers faster, and stopped more malicious apps from entering the Google Play Store than ever before. The number of rejected app submissions increased by more than 55 percent, and we increased app suspensions by more than 66 percent. These increases can be attributed to our continued efforts to tighten policies to reduce the number of harmful apps on the Play Store, as well as our investments in automated protections and human review processes that play critical roles in identifying and enforcing on bad apps.

In addition to identifying and stopping bad apps from entering the Play Store, our Google Play Protect system now scans over 50 billion apps on users' devices each day to make sure apps installed on the device aren't behaving in harmful ways. With such protection, apps from Google Play are eight times less likely to harm a user's device than Android apps from other sources.

Here are some areas we've been focusing on in the last year and that will continue to be a priority for us in 2019:

Protecting User Privacy

Protecting users' data and privacy is a critical factor in building user trust. We've long required developers to limit their device permission requests to what's necessary to provide the features of an app. Also, to help users understand how their data is being used, we've required developers to provide prominent disclosures about the collection and use of sensitive user data. Last year, we rejected or removed tens of thousands of apps that weren't in compliance with Play's policies related to user data and privacy.

In October 2018, we announced a new policy restricting the use of the SMS and Call Log permissions to a limited number of cases, such as where an app has been selected as the user's default app for making calls or sending text messages. We've recently started to remove apps from Google Play that violate this policy. We plan to introduce additional policies for device permissions and user data throughout 2019.

Developer integrity

We find that over 80% of severe policy violations are conducted by repeat offenders and abusive developer networks. When malicious developers are banned, they often create new accounts or buy developer accounts on the black market in order to come back to Google Play. We've further enhanced our clustering and account matching technologies, and by combining these technologies with the expertise of our human reviewers, we've made it more difficult for spammy developer networks to gain installs by blocking their apps from being published in the first place.

Harmful app contents and behaviors

As mentioned in last year's blog post, we fought against hundreds of thousands of impersonators, apps with inappropriate content, and Potentially Harmful Applications (PHAs). In a continued fight against these types of apps, not only do we apply advanced machine learning models to spot suspicious apps, we also conduct static and dynamic analyses, intelligently use user engagement and feedback data, and leverage skilled human reviews, which have helped in finding more bad apps with higher accuracy and efficiency.

Despite our enhanced and added layers of defense against bad apps, we know bad actors will continue to try to evade our systems by changing their tactics and cloaking bad behaviors. We will continue to enhance our capabilities to counter such adversarial behavior, and work relentlessly to provide our users with a secure and safe app store.

How useful did you find this blog post?