Google Play is not the first time insistently offers to use the App Bundle application.
I started to understand, but did not see many criteria and reasons to use it in my project, so please tell me who has already encountered or managed to notice more than me.
One of the main criteria that I managed to identify for myself is the ability to load functions On Demand. By the way which are very well described here.
But based on this, the only criterion that comes to my mind is that you can load those or modules as needed.
It is also not clear how the choice of screen extensions/specific platform when downloading the application from the Google Play Store.
App Bundle allows your app to be split up along different lines.
https://developer.android.com/platform/technology/app-bundle
It's easy to switch. You don't need to refactor your code to start benefiting from a smaller app. And once you've switched, you'll benefit from modular app development and customizable feature delivery.
Therefore like you mention
One of the main criteria that I managed to identify for myself is the ability to load functions On Demand. By the way which are very well described here.
So Google can be clever and send a subset of your app to the device. (The benefit being faster download times for your app. More acquisition, less user drop off on install).
If your app targets tablets and phones, google can be clever and only send the tablet resources to the tablet. Same example can be said for languages and other resource types.
Documentation benefits:
They give 6
TLDR: 1 file to upload when making an app
Build one artifact that includes all of your app's compiled code, resources, and native libraries for your app. You no longer need to build, sign, upload, and manage version codes for multiple APKs.
TLDR: smaller downloads for users
Google Play's Dynamic Delivery uses your Android App Bundle to build and serve APKs that are optimized for each device configuration. This means your users enjoy a smaller app download without the unused code and resources needed for other devices. Track the size of your app in the new app size report in the Google Play Console.
TLDR: smaller downloads for users
Customize and control your user experience by delivering features to the devices and users you choose, as and when they're needed, instead of at install time. This means that adding features no longer has to result in adding to your app's size at install time. Use conditional delivery to deliver features to countries, device types, or devices running a minimum SDK version. Use on-demand delivery to deliver features on demand, which can be installed and uninstalled as needed.
TLDR: More maintainable code
The Android App Bundle enables modular app development so you can design, build, debug and test your app's features as independent modules that can be added to your main app when ready. You'll see fewer merge conflicts and disruptions because you no longer have to have an entire engineering team working on the same monolithic app with complex and bloated code.
TLDR: Faster build speeds
Build systems, such as the Android Studio build system using Gradle, are optimized for modular apps so they are significantly faster to build than large, monolithic apps. You'll spend less time sitting around waiting and more time designing, coding, and testing your app.
TLDR: Better user acquisition
Instant-enable your Android App Bundle or instant-enable specific dynamic feature modules to give users a frictionless way to experience your app. Users can launch your experience from the Try Now button on Google Play and web links without installation.
Related
I am introducing to the world of apps like Uber and Line. When I am implementing the server-side of this kind of app, I realize I have to support different versions of my app at runtime. To overcome this requirement, I see three different choices:
Keep a (different) running instance of the server-side for each app version supported. For example, if I support 3 versions of an app, I will have 3 instances running in the server.
Use namespaces for functions, in a few words, clone many functions/class. For example, if I support 3 versions of an app, I will potentially have 3 versions of a function (eg. fun_v1, fun_v2, fun_v3).
Keep a (different) configuration file for each app version. This file sets that functions or services an app can use and how to use it.
These three options don't look so modular and a lot "copy and paste" code. If you have any different opinion, let me know.
normally mobile apps talk to server via a set of API routes/functions.
From my experience, I think I would pick the second option.
Usually I develop these API routes into different versions a long the way (eg. v1, v2, v3, ...), so let's say version 1 of the app calls the route POST v1/login which links to login_v1, and version 2 of the app calls POST v2/login which links to login_v2. This technique keeps things flexible as you can map any route to any function that you want (eg. login/v3 to login_v2).
Also, the server will keep track of the latest version of the app. When the app opens, it fetches the latest version number from the server, if it is more recent compared to the current version of the app, we may ask the users to update the app for new features.
Hope this helps.
Today I updated my app on the Google Play Store, I'm using Unity3d. The changes I make to the .apk are only 3 or 5 mb. but when a player updates, the file size for the updated app is the same size or greater as a for a player who is freshly installing the game.
Why are the updates greater than or equal to the app size?
Well, when you push a new release, it is an update for your current users, but it is fresh installing package for your new users. Google Play will handle the updating or installing phase for you. Your users don't have any choice of what they want in Google Play.
Edit (to make things clearer):
Google uses (or at least until now) Delta updates (or what they call Smart updates) to update apps on Google Play.
This has been implemented in Google's Android operating system devices
that run on Android 2.3 or above. Google engineers have estimated that
smart updates would be only about one third the size of a full update
on average.
And they began to use it from 2012:
Google Play has used delta algorithms since 2012, and we recently
rolled out an additional delta algorithm, bsdiff (created by Colin
Percival), that our experimentation shows can reduce delta size by up
to 50% or more compared to the previous algorithm for some APKs.
Bsdiff is specifically targeted to produce more efficient deltas of
native libraries by taking advantage of the specific ways in which
compiled native code changes between versions. To be most effective,
native libraries should be stored uncompressed (compression interferes
with delta algorithms).
So don't worry, your users don't need to download the whole app again if you only change some code in your new version of apps. But if you change the whole code in your apps, of course they will have to download the whole app again because it is fresh new now. If you don't want the updates being handled by Google, you can do this process in your server side.
Sources:
https://en.wikipedia.org/wiki/Delta_update
https://android-developers.googleblog.com/2016/07/improvements-for-smaller-app-downloads.html
Hope this answers your question.
I think you might be confused by the way Google Play displays data size for the app in the download activity vs. the update activity. Understandably so, as they provide no context as to whether or not the file size listed is just the update, or the entire app size.
The answer is, it depends.
#Silver gave a great explanation of how their updated algorithm handles the downloading of data but I think your confusion is on the perceived file size that is displayed on the different Play activities.
Depending on what was changed, a smaller or larger portion of the entire application may need to be re-downloaded. For example, if you made a change to a list of enums, or added a strings.xml file for a different language, you might expect this to be a very small update. But throughout your program, files have been updated to handle the new change. Depending on where in the hierarchy of your program these changes occur, a user may have a larger download than expected.
For major releases (i.e. AppVersion-MAJOR.MINOR.PATCH) the user may have to re-download the entire app as so many of the base libraries have changed.
Size-on-Disk Tip: Utilize a hosted API whenever possible and practical to do so in order to outsource processing power and file size to the API instead of running it all locally on the user's device. While you will have to use data (Wi-Fi or otherwise) to make the API calls; concise JSON does not require much data.
I want to develop an android app that supports dynamic delivery feature. Although this feature was announced last year, it's still on beta and I couldn't find any real app that uses this technology. Does anybody know any real android app on Play Store that has an on-demand module?
There are lots of news about app bundle, but it's limited to CPU architecture, the display density, and the languages.
Previously developers used to to build multiple APKs to target different API versions & device types.
But with Android App Bundle I just upload the single artifact with all of our application resources and the tooling takes care of what needs to be built and delivered to the app user base. I was able to reduce app size by nearly between 60% to 70%.
Nowadays many famous apps like Airbnb , LinkedIn, Twitter use dynamic app delivery for its users.
Have a look at this amazing post on Dynamic App Delivery by Joe Birch
Android developer guide on Dynamic App Delivery
How to use App Bundles to reduce the size of the app
Google Samples Android Dynamic Feature Modules
There are some apps using dynamic features, including some big names you'd recognize, but I'm not sure they have been publicly announced yet. I'd keep an eye on the press around Google I/O 2019 if you are curious, it's only a month away.
It seems Netflix app has a dynamic-feature module. Its customer service feature is a dynamic module that is not installed by default. By clicking on the "Help" button, it will download and install the customer service module.
I've heard that Facebook has a dynamic module but I didn't check that myself. I will update this answer if I found any other apps that have dynamic modules.
Adobe Acrobat also supports that: https://developer.android.com/stories/apps/adobe-app-bundle
I was just wondering the same when try to update from PlayStore.
Generally, say for Windows, when it is updated, downloads the files and patches them. From size perspective, these are significantly small compared to its setup which is around 3.5 GB.
So why its not applicable for ANDROID apps? E.g. any update to WhatsApp is almost equivalent to its original setup file (~18 MB).
Although Play Store calls them updates, you actually download the whole Android app again. In a way, it's still an update because you do actually upgrade to a newer apk version but not quite the way you would've liked. It's taxing on your bandwidth but it's easy.
However, your app's settings (shared preferences) and data (SQLite databases or custom files) survive this update/install process which won't be the case if you manually uninstall & install the app's new version again.
In cases where the app's database schema has evolved between the two versions, Android notifies the app on startup that it wasn't a fresh install by calling a life cycle method onUpgrade() where the app has a chance to upgrade its data left over by the previous version.
When you compare this with Windows, both the OS and the update server are from Microsoft and they must have worked together to figure out what needs to be pushed (.dll, .ini, .sys etc.), update bundle's format/compression and security implications (some sort of encryption to prevent malware injection by any one intercepting the traffic).
No such standard update mechanism has been made available by Google for the Play Store see update and I believe so is the case with every other app store. Obviously, the developers can't roll out one on their own since the updates are handled by Google both at the device and server side.
But, the developers are certainly not unhappy about it. It's much more convenient to test the new apk, see it working and uploading the same rather than fiddling with what changes to push and breaking the app if you miss something. The bandwidth is cheap anyway.
I've just recently discovered that at Google I/O 2012 Google announced that they were working on a Smart Updates technology using some delta encoding algorithm. The idea was to compute the DIFF between two APKs (sort of like we do for text between two source code files), create a patch on the server-side and only send that over the wire.
This feature went live on Play Store later that year as reported by AndroidPolice and TechCrunch.
Developers, Google said at I/O, won’t have to do anything to enable
this feature and according to the folks over at Android Police, this
feature quietly went live late last night or early this morning.
You can see it in action in this video. Notice how the apps start installing once the progress bar hits just 40-50%. This is absolutely brilliant because not only this saves Google terabytes of bandwidth, its pure server-side approach means developers don't have to fiddle with anything. Perhaps, that's the reason it finds no mention on the android developers site and so takes time to get discovered.
With that said, my personal experience seems to coincide with yours. I see most of my app updates download almost the whole of the app. Maybe it's because I don't download very frequently. It's not unusual for me to skip several minor revisions and perhaps the app changes far too much to derive any size benefits out of the patch generated.
There is nothing like an "update" for an Android app. It is always a full app. It is called update, because it is a new version of the app currently installed in a device.
But when it is an "update" the whole app is not fully downloaded. For many years the Google Play downloads just parts of the app and patches the currently installed app with the difference. So in the case of 20MiB the Google Play can download just few megabytes to reconsctruct the new version in a phone. Google calls is Smart App Updates or something like that.
okay, its a general question, is it possible to make a web installer ( a single apk file hosted on the play store or app store which on execution, download the code and resources from my own web server, the apk file will just act like a downloader or something like that) for an app on Play Store or in App Store? the main concern is, I don't want some crackers to access and break into the app for the premium version of the app.
have anyone tried or heard of this kinda app distribution? or any app/developers use this method to deliver the app? (guess some games do?)
PS. web installers have some advantages of controlling the older versions and also can reduce the apk file size as I guess the low pixel density resources only need to be delivered to devices with low density displays. ie, the resources(icons and stuff) for a low end device does not need to be delivered to a high or middle or extra high end device and vice versa. plus developer dont need to worry about offline app transfers thus each download can be counted. but a disadvantage of heavy use of server.
thanks, for any views, guidelines or suggestions.
NB- Its not a web app. the Java coded app for android and Objective C coded app for iOs
On iOS, if you're wanting to distribute the entire application from your website without using the App Store it's not possible as a general rule. The two exceptions being:
If you get an Enterprise developer's account from Apple, then you can prepare installation packages that will work from a web site. However, you may only distribute the application to direct employees.
For testing stages you can prepare ad-hoc releases and then work with a company such as TestFlight. If you take this approach you're limited to release to 100 devices per year and each release is only valid for 3 months. You can't remove devices from the list except on the anniversary date of your developer account.
If you're actually wanting to put the installer application in the App Store and then download the actual Application, it's not allowed under any circumstances. The ToS prohibit you from having an application which downloads executable code or script (with the implicit exception of a web application)