Décrivez d'abord la conclusion:
android:extractNativeLibs = true
Lorsque gradle est empaqueté, il sera 对工程中的so库进行压缩
finalement généré apk包的体积会减小
.
Cependant, lorsque l'utilisateur installe l'apk sur le téléphone mobile, le système décompressera la bibliothèque ainsi compressée, ce qui provoquera l'utilisateur 安装apk的时间变长
.
En ce qui concerne le android:extractNativeLibs
paramètre de valeur par défaut, si le développeur n'a pas fait de configuration spéciale pour Android: extractNativeLibs:
minSdkVersion < 23 或 Android Gradle plugin < 3.6.0
Au cas où, lors de l'emballageandroid:extractNativeLibs=true
;minSdkVersion >= 23 并且 Android Gradle plugin >= 3.6.0
Au cas où, lors de l'emballageandroid:extractNativeLibs=false
;
Un, cause
Zone de programme https://www.yehe.org/J'ai accidentellement découvert qu'en utilisant AndroidStudio pour empaqueter le même module qu'un aar
AND apk
, l'espace disque occupé par les deux est énorme:打包为aar,占用磁盘空间4.4M;打包为apk,占用磁盘空间为11.7M;
Utilisez AndroidStudio dans l'analyse comparative apkanalyzer des deux bibliothèques emballées si Rwa File Size
grand écart, mais les deux ont Download Size
exactement la même taille:打包为aar,so库Rwa File Size为3.4M;打包为apk,so库Rwa File Size为8.2M;
打包为aar,so库Download Size为3.3M;打包为apk,so库Download Size为3.3M;
L'analyse comparative des deux méthodes d'emballage apkanalyzer est la suivante:
Deux types de méthodes d'emballage Rwa File Size
avec Download Size
un grand écart entre cela Raw File Size
et Download Size
comment est-il défini?
二 、 Taille du fichier brut et taille du téléchargement
View_file_and_size_information officiel: La description est la suivante:
APK Analyzer shows raw file size and download file size values for each entity, as shown in figure 1. Raw File Size represents the unzipped size of the entity on disk while Download Size represents the estimated compressed size of the entity as it would be delivered by Google Play. The % of Total Download Size indicates the percentage of the APK's total download size the entity represents.
Après la traduction:
APK Analyzer montre chaque entité Raw File Size
avec download file size
: des Raw File Size
représentants des tailles non compressées de l'entité correspondante sur le disque; des Download Size
représentants de la taille correspondante de l'entité dans Google Play, une compression estimée; des % of Total Download Size
représentants de l'entité de module correspondante, une part de la taille totale du pourcentage de taille de téléchargement.
Voyant cela, doutez:
打包为aar时,AndroidStudio对Module中的so库进行了压缩;但打包为apk时,未对Module中的so库进行压缩
。
三 、 Android: extractNativeLibs
En demandant des informations pertinentes, j'ai trouvé l'article Taille du fichier brut d'APK Android vs Taille du téléchargement: L'
article mentionné: Lors de l'
emballage de l'APK, 是否对so库进行压缩
l'attribut de contrôle est android:extractNativeLibs
.
AndroidManifest.xml
extractNativeLibs
Mode d'utilisation des propriétés:
<application
android:extractNativeLibs="true">
</application>
3.1 Android: extractNativeLibs = true
Si android:extractNativeLibs = true
, lors de l'empaquetage d'apk AndroidStudio会对Module中的so库进行压缩
, la taille finale d'apk est plus petite.
好处是:
Lorsque les utilisateurs téléchargent et mettent à niveau sur le marché des applications, les utilisateurs sont plus disposés à télécharger et à mettre à niveau, car ils consomment moins de trafic.缺点是:
Parce que tel est compressé et stocké, lorsque l'utilisateur installe, le système décompresse le so et stocke à nouveau une copie. Par conséquent, le temps d'installation sera plus long et l'espace de stockage sur disque utilisateur occupé augmentera à la place.
3.2 、 android: extractNativeLibs = false
Si l' android:extractNativeLibs = false
apk est empaqueté AndroidStudio不会对Module中的so库进行压缩
, l'apk final généré est de plus grande taille.
好处是:
Après l'installation de l'utilisateur, utilisez directement/data/data/your.app.package/lib
le donc sous le chemin, il n'y a pas d'opération de copie supplémentaire, relativementandroid:extractNativeLibs = true
parlant, économisez l'espace de stockage sur disque de l'utilisateur;
3.3. Conclusion
android:extractNativeLibs = true的设定还是利大于弊的。
设置为true可以工程中的so库进行压缩,最终减小生成的apk包大小。至于安装应用时,因so库解压缩而造成的安装时间增长,相对于带来的好处(提高应用市场用户的下载和升级意愿)而言,我认为是可接受的。
Quatre, Android: valeur par défaut de extractNativeLibs
L'API officielle d'Android: extractNativeLibs est décrite comme suit:
Vous pouvez apprendre de la description officielle de l'API d'Android: extractNativeLibs:
- La valeur par défaut de android: extractNativeLibs dans le code source est true;
- Compilateur Android Gradle plugin 3.6.0 ou supérieur, la valeur par défaut de android: extractNativeLibs est false;
但真的是这样吗?一起来探究一下。
4.1, paramètres par défaut de extractNativeLibs dans le code source
À partir d'Android 6.0 (API 23), PackageParser.java
lors de la lecture des android:extractNativeLibs
valeurs d'attribut dans le code source du cadre Android , la valeur par défaut est true;
Chemin du code source correspondant:frameworks/base/core/java/android/content/pm/PackageParser.java
if (sa.getBoolean(
com.android.internal.R.styleable.AndroidManifestApplication_extractNativeLibs,
true)) {
ai.flags |= ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS;
}
4.2, plugin Android Gradle 3.6.0 ou supérieur
Le compilateur l' Android Gradle plugin 3.6.0 或更高版本
utilisera par défaut lors de la construction de l'application extractNativeLibs 设置为 false
.
En observant les AndroidManifest.xml
fichiers générés après la compilation , on constate que la valeur par défaut du plug-in gradle est définie sur false, ce qui est obtenu lors du traitement du fichier AndroidManifest.xml 在其中自动插入 android:extractNativeLibs=“false"来实现的
.
Étant donné que android:extractNativeLibs
cette propriété est introduite dans Android 6.0 (API 23), si la configuration du projet minSdkVersion < 23
, le plug-in gradle n'est pas inséré automatiquement android:extractNativeLibs=“false"
.
4.3. Conclusion
Lorsque le développeur empaquete l'apk, s'il n'y a pas de configuration spéciale pour Android: extractNativeLibs:
- Si
minSdkVersion < 23 或 Android Gradle plugin < 3.6.0
, lors de l'emballageandroid:extractNativeLibs=true
; - Si
minSdkVersion >= 23 并且 Android Gradle plugin >= 3.6.0
, lors de l'emballageandroid:extractNativeLibs=false
;
Cinq, référence
apkanalyzer :
https://developer.android.com/studio/command-line/apkanalyzer
view_file_and_size_information :
https://developer.android.com/studio/build/apk-analyzer.html#view_file_and_size_information
Taille du fichier brut de l'APK Android vs taille du téléchargement :
https://stackoverflow.com/questions/45024723/android-apk-raw-file-size-vs-download-size-how-to-shrink-the-raw-file-size
android: extractNativeLibs :
https://developer.android.com/guide/topics/manifest/application-element.html#extractNativeLibs
Configuration d'Android: extractNativeLibs pour réduire la taille de l'application :
https://stackoverflow.com/questions/42998083/setting-androidextractnativelibs-false-to-reduce-app-size