Self-hosting apk expansion files - android

I'm working on an Android digital library app and would like to provide a collections of sample resources in various languages - one collection in each language - ideally as apk expansion files. I understand that I can only have a maximum of two APK expansion files using Google Play Store.
This is a two-part question:
Is there a way to host the .obb files on my server?
If so, is there a way to select a particular .obb file to use? (in the app UI, offer the user a choice of languages in which to receive sample content.)

Related

Android APK with pre-installed localized data

We have an Android application that supports up to 5 languages. If we were to pre-install a set of data, we would normally add 5 zip files (1 for each language). However, the data has since grown to be 100Mb each. As such, its not possible to package all the 5 zips in the assets folder.
What options do we have to creating a APK with pre-installed data? Is it possible for users to install a extension pack based on their device locale? Or do we have to upload 5 APKs in the Play Store, one for each language.
In documentation, it is given -
Google Play currently requires that your APK file be no more than
100MB . If your app exceeded 100MB, you had to host and download the additional resources yourself when the user opens the app.
Read this about APK Expansion Files.
Also, In this answer, it is given how to make .obb file as .zip file and upload it on Play Store.
OR
You can also make a check on App opens / or ask the user to download the language pack and download it directly from the server .(That would be simpler and easier one).

About Android Developer Program Policies, Could I download a dex file from another website and load it?

I want to reduce my android apk file size, so I split some function source code and compile those code to a Jar file, it contain a dex file in the jar file. When android app need use those functions, the app download the jar file and load dex file from it.
But I found the Android Developer Program Policies said:
An app downloaded from Google Play may not modify, replace or update
its own APK binary code using any method other than Google Play's
update mechanism
My question is do I do this a violation?
Yes because you're basically updating your APK without the Google Play's update mechanism. If you truly wish to minimize the .apk file size, you can put your resources online and request them through a custom api.
For example: I developed an app which uses Google Earth marker and polygon coordinates, descriptions and other useful information that are stored on my webserver, online in a .kml file. Because I'm constantly updating the file with new markers and polygons, I don't want the user to download the .apk file with a huge filesize each time I update my resources. So that's why I stored my resources online which the user downloads while using my app and that keeps the .apk filesize to less than 3MB which is great for the people who download the app through the play store. Otherwise the filesize would have been 15MB+ with all the images and other resources with that keeps on growing by each minute.
Nonetheless, the user would have to download the resources one way or another but I do like your way of thinking though to keep the size of the .apk file low as possible.

Related concept for iOS like "APK Expansion Files in Android"

I'm expecting suggestions for the concept related to APK Expansion Files in Android.
Google Play currently requires that your APK file be no more than 50MB. For most applications, this is plenty of space for all the application's code and assets. However, some apps need more space for high-fidelity graphics, media files, or other large assets. Previously, if your app exceeded 50MB, you had to host and download the additional resources yourself when the user opens the app. Hosting and serving the extra files can be costly, and the user experience is often less than ideal. To make this process easier for you and more pleasant for users, Google Play allows you to attach two large expansion files that supplement your APK.
Does apple give any support like this?
In my case I have 180MB audio file, I don't want to keep that with app resource. After installation I want this download from APPLE store.
I can able to keep this in my server and download when app opens first time, but I would like to know is there any other way to supplement for iPA.
Thanks InAdvance.
The maximum size of your ipa could be up to 2GB. For sizes upper than 50mb will be downloaded through WiFi or from iTunes. ipa less than that could also be downloaded through 3G network.
Try to make your app size as minimum as possible as users don't really like apps with larger size..
Well there's no thing here in iOS like APK Extension Files in Android.. Everything is your one single ipa which is compressed form of your binaries and resources.
Apple doesn't offer a facility for this specific use case.
You'll have to download the content when your app starts for the first time. Remember to store it in the caches directory or set the "do not backup" flag on the files. This is according to Apple's guidelines and required for app review. If you store it in the Caches directory, iOS may decide to delete the data when disk space is low, so be prepared to download it again if it doesn't exist when your app starts.
Unless you're using in-app purchases and targetting iOS 6 users only, you'll have to host it on your own servers. In-app purchases cannot be free.

APK Expansion File Localization?

I have some very large (650MB) content files (video, audio) in about 4 different locales.
I want to use APK Expansion Files but they do not seem to support localization.
It seems we can have seperate application listings in Google Play as long as they have different application names (app listing filtered per locale).
What I do not understand is, if you upload the same application (in seperate application listings, same binary, same version), how does the device know where to get the expansion files from?
For instance, suppose I have 2 localized applications with seperate application listings:-
My App (UK) + Expansion File (UK)
My App (DE) + Expansion File (DE)
If the application I upload for both listings is the same binary, same version, I can't see how Google Play will know how to associate the app installed, with either of those listings?
This problem occured to me during testing whilst setting up 2 listings for DE and UK with the same draft APK.
Does anyone have any experience with this and is there a recommended approach? Any advice would be much appreciated.
Thanks in advance.
In order for you to upload it as two seperate listings, each application needs to have a different package name. Otherwise when you try to upload the second one, you'll get an error.
When you upload an APK, you also upload the expansion file, which is then associated with that particular APK (via package name). The device gets the expansion file from Google Play, which tracks that association.
All that said, there are disadvantages to uploading two identical APK's- Your ratings will be split across two apps, for instance, and ranking will suffer since neither one will get as many ratings as if you only had one APK covering both situations.

Apk external data, Android Expansion

I am using concept of Android Expansion which helps us to remove obstacle of 50mb limitation of Apk.
Following all the steps http://developer.android.com/guide/market/expansion-files.html
I understood that you need to follow file format like this [main|patch].<expansion-version>.<package-name>.obb and did the same.
And also Expansion files may be in (ZIP, PDF, MP4, etc.) format.
I uploaded additional expansion files while publishing apk on Google play. At the time of download apk I get all the additional in my Local(Advanced latest Device), But through code I am not able to get the expansable files of my application.
In code looking at the sampleDownloader code I came to know that it requires three parameter (int type, int expansionCode, long fileSize)
here type: main/patch expansionCode: integer value but I am just wondering how to give FileSize in Long(exact)? and second thing its show message like Download failed because the resource could not be found
Any idea?
Update
Done, all steps are shown here
Did you go through Downloading the Expansion Files? It mentions that
If the expansion files are not there with your Application downloaded from Android Market,
You have to perform Application Licensing to get your app's expansion file names, sizes, and URLs.
Perform a request using Google Play's Application Licensing to get your app's expansion file names, sizes, and URLs.
Use the URLs provided by Google Play to download the expansion files and save the expansion files.
UPDATE:
No, its not compulsory that Google Licensing only works with paid Application. There is a clear Note: defined in the Docs itself that any application may use licensing service to initiate the download of an APK expansion file. But, in that case your request will be only for expansion files and not for a check whether the user paid for the app or not.

Categories

Resources