Reducing SDK Size

To downsize the package, you can download the assets resources, so libraries, and animated effect resources MotionRes (unavailable in some basic SDKs) required by the SDK online. After successful download, set the paths of the above files in the SDK.
We recommend you reuse the download logic of the demo. You can also use your existing download service.
If you reuse the demo download logic, note that the checkpoint restart feature is enabled by default in the demo, so that a download can be resumed later if it is interrupted. To use this feature, make sure that your download server supports the checkpoint restart capabilities.
Check method
Check whether the web server supports range requests. If range requests are supported, then the server supports checkpoint restart. Run the following `curl` command on the command line:
curl -i --range 0-9 https://your server address/name of the file to be download
For example:
curl -i --range 0-9 https://mediacloud-76607.gzc.vod.tencent-cloud.com/TencentEffect/Android/2.4.1.119/xmagic_S1-04_android_2.4.1.119.zip
If the returned content contains the `Content-Range` field, the server supports checkpoint restart.

Dynamically Downloading .so Libraries

.so library packages are in jniLibs/arm64-v8a and jniLibs/armeabi-v7a.



To reuse the download service in the demo
To use your own download service
1. Calculate the MD5 value of the two ZIP packages. To do so on macOS, directly run MD5 file path/filename in Terminal or use an applicable tool.
2. Upload the packages to your server and get the download URLs.
3. Update the values of the following constants in ResDownloadConfig in the demo project:



4. Call ResDownloadUtil.checkOrDownloadFiles to start download.
1. Download and decompress the packages and set their paths in the SDK. For example, after decompressing a package, set so path = /data/data/com.tencent.pitumotionDemo.effects/files/xmagic_libs.



Note:
We strongly recommend you download .so libraries to the private directory of your app rather than an external storage device to prevent them from being mistakenly deleted by clearing tools. We also recommend you download the .so libraries of v8a or v7a based on the CPU architecture of user mobile phones to expedite downloads. You can refer to LaunchActivity in the demo project.
2. Call the following code to load .so libraries and authenticate the license.
XmagicApi.setLibPathAndLoad(path);
auth();
Note:
When the SDK version is updated, the corresponding .so libraries may also change, and you need to download the .so libraries again. We recommend you refer to the method in the demo and use the MD5 value for verification.
Regardless of whether you choose to download .so libraries on your own or reuse the download service in the demo, check whether they have been downloaded before calling the auth API of the SDK. ResDownloadUtil provides the following method for checking. If they have been downloaded, set their paths in the SDK as shown below:
String validLibsDirectory = ResDownloadUtil.getValidLibsDirectory(LaunchActivity.this,

isCpuV8a() ? ResDownloadConfig.DOWNLOAD_MD5_LIBS_V8A : ResDownloadConfig.DOWNLOAD_MD5_LIBS_V7A);
if (validLibsDirectory == null) {
Toast.makeText(LaunchActivity.this,"Libraries are not downloaded. Download them first",Toast.LENGTH_LONG).show();
return;
}
XmagicApi.setLibPathAndLoad(validLibsDirectory);
auth();

Dynamically Downloading assets Resources

You can dynamically download assets resources as follows:
1. Configure the following in assets in your local project:
On 2.4.0 or later: No files in the local assets directory need to be retained.
On versions earlier than 2.4.0: You need to retain the license file and four JSON configuration files: brand_name.json, device_config.json, phone_info.json, and score_phone.json.
2. Find the download_assets.zip package in the SDK.



3. Calculate the MD5 value of the ZIP package in the same way as described above for the .so files, Then, upload the packages to the server to get the download addresses.
To reuse the download service in the demo
To use your own download service
1. Update the download address and MD5 value in the following figure.



2. Call ResDownloadUtil.checkOrDownloadFiles to start download and call ResDownloadUtil.getValidAssetsDirectory to get the path of the downloaded assets. For detailed directions, see LaunchActivity.java.
After downloading and decompressing the above ZIP package, you need to reorganize the file structure as follows:



Here, names in the red box such as light_assets and light_material cannot be changed arbitrarily. We recommend you directly reuse the organizeAssetsDirectory method in ResDownloadUtill to organize the structure.
Note:
When the SDK version is updated, the corresponding assets may also change, and you need to download the assets again to ensure compatibility. We recommend you refer to the method in the demo and use the MD5 value for verification.
Regardless of whether you choose to download the assets on your own or reuse the download service in the demo, check whether assets have been downloaded before capturing video. ResDownloadUtil provides the following method for checking. If they have been downloaded, set their paths in the SDK. For detailed directions, see LaunchActivity.java.
String validAssetsDirectory = ResDownloadUtil.getValidAssetsDirectory(LaunchActivity.this,ResDownloadConfig.DOWNLOAD_MD5_ASSETS);
if (validAssetsDirectory == null) {
Toast.makeText(LaunchActivity.this,"The `assets` are not downloaded. Download them first",Toast.LENGTH_LONG).show();
return;
}
XmagicResParser.setResPath(validAssetsDirectory);
startActivity(intent);

Downloading Animated Effect Resources MotionRes

Some basic editions don't have animated effect resources. You can skip this section based on your actual conditions.
Animated effects are divided into six types, and each type has several ZIP packages, each of which contains an animated effect. The file content varies by your purchased edition.



Animated effect resources can be downloaded as needed. For example, download can start after a user enters the relevant feature page or after clicking the icon of an animated effect.
You need to upload these ZIP packages to the server and get the download address of each ZIP package.
Note:
The MotionRes directory of downloaded animated effect resources must be at the same level as light_assets and light_material described in the previous section. In addition, each animated effect needs to be extracted and cannot be placed in the same ZIP package.



To download MotionRes, refer to the ResDownloadUtil.checkOrDownloadMotions method. We recommend you download such resources one by one.
To reuse the download service in the demo, replace the value of the MOTION_RES_DOWNLOAD_PREFIX constant in ResDownloadConfig with your download URL prefix.