Objective
There are many more techniques for apk updates, such as: Incremental update, plug-in development, hot fix, RN, silent installation.
Here's a quick introduction:
What is an incremental update?
Incremental updates are the only places where the original app is updated and the rest remains intact.
The benefits of this are obvious compared to the fact that each update will download the full APK package: There are always fewer places to change, so the volume of the update package is much smaller.
Process for incremental Updates
1.APP detection of the latest version: The current version to tell the server, the service side to judge.
If there is a new version, the server needs to make a difference between the current version of the APK and the latest version of the APK, resulting in a patch differential file. (or the new version of the APK uploaded to the server when the difference is good)
2.APP in the background to download the differential file, the file MD5 check, the local merge (with the local data directory under the apk file merge), after merging the latest apk, prompting the user to install.
3. The ultimate goal of incremental updates: Save traffic to update the host APK.
The trouble with differential processing is the difference between different application market channels and many different versions.
Note: The new version is likely to be smaller than the old version, and the difference simply records the changed parts.
Server-side behavior (background engineer operation)
1. Download the third-party libraries to use for splitting and merging (Bsdiff, bzip2)
The third-party libraries we use are: Binary diff, abbreviated as Bsdiff, which is specifically designed to achieve the differential and merging of files, and its official website is as follows:
http://www.daemonology.net/bsdiff/
Here we can click "Here" to download the source code, this is the Linux source code. You can also download the Windows version of the source code, click "Windows Port".
Recommend compiling with SBSDIFF4.3-WIN32-SRC under Windows
This library refers to the BZIP2 library, the official website is as follows:
http://www.bzip.org/
2. Compiling third-party library source code generation DLL Dynamic Library
In order to facilitate the demonstration, I am in the Windows 10 platform to compile with VS2017, the actual situation of the server is mostly running under the Linux system, this everyone to test it.
Windows Build DLL Dynamic Library Reference Android NDK Development Tour 10--JNI--JNI development process
Resources used
Note: The com_haocai_bsdiff_bsdiff.h is based on the Java file declaration, and the steps are omitted.
The following error message will be found during compilation
Character Set issues
Unsafe and outdated functions are used.
SDL Check does not pass
Here are the workarounds:
Configuring character Sets
Ignore unsafe and outdated function warnings
Set up SDL Check form
In addition, may not be found in the header file errors, this may be a coding problem, because the foreign use of the Apple Computer with the Windows computer compiled inconsistent results. The transcoding function can be notepad++ by transcoding, all to UTF-8 no BOM format encoding can, Windows, Linux Universal.
Inside the build configuration of our project properties select the DLL, and modify the solution for your computer's corresponding platform, then compile, generate DLL dynamic library file.
3.Java code calls
Create a Web project to use as the service side of the app. The Create tool class is specifically designed to generate differential packets:
Where JNI is implemented as follows (the implementation is written in bsdiff.cpp):
By studying the source code of Bsdiff, we found that the main function inside the bsdiff.cpp is the entry function, avoid ambiguity to change the function name main to Bsdiff_main, and then through the JNI to invoke.
According to the Bsdiff_main function method in Bsdiff.cpp, there are the following key statements
if (argc! = 4) Errx (1, "Usage:%s oldfile newfile patchfile\n", argv[0]);
You need to pass in 4 parameters as prompted:
Argv[0] = "Bsdiff";//This parameter is useless
ARGV[1] = oldpath;//old apk file path
ARGV[2] = newpath;/new apk file path
ARGV[3] = patchpath;//apk differential file path
Then we prepare two apk files, different versions of the best Java code, the resources are not the same.
Write a Java test class to generate the differential packet:
The build results are as follows:
Apk.patch for the generated differential packet
Attention:
TEST_NEW.APK, test_old.apk should be placed in the target directory first
The program method for generating the differential packets in the Bsdiff.cpp is asynchronous, so it might be a bit of a wait to generate the complete apk.patch. Apk.patch volume size stops growing, indicating the end of the build.
4. Simple background javaweb for Android front-end download Apk.patch differential packet
Reference Intellij idea Create javaweb and servlet simple implementation
Enter in the browser
Http://localhost:8080/App_Update_Web/patchfile/apk.patch
, prompting to download
Server Setup is complete.
Android Client Behavior
1. Compiling third-party libraries for merging (Bsdiff, bzip2)
The corresponding Java code is as follows:
On the Android side, we need to copy the bzip2 and Bsdiff files into the JNI directory, so we just need to compile a bspatch.c source file.
Files required by the Ndk-build
Since Android phones are inherently Linux systems, we use Bsdiff's Linux version of the library directly.
As with the server side, here we change the main function in bspatch.c to Bspatch_main, which provides the JNI call:
The Code v1.0 differential packet Merge core code is as follows:
Main logic in the FileDownload method, we first download the differential packet, then the local composition, and finally prompt the user to install.
In order to achieve the obvious effect, two versions can delete some resource files, modify Java code, layout files and so on.
Note: There may be a problem here 7.0, exposing the path to other apps, need to fileprovider to achieve (not difficult, this left to everyone to do it).
SOURCE Download: https://github.com/kpioneer123/DiffInstallApp
Android apk Incremental Update