Attributs minceur APK-Android: extractNativeLibs

Décrivez d'abord la conclusion:

android:extractNativeLibs = trueLorsque 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:extractNativeLibsparamè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.0Au cas où, lors de l'emballage android:extractNativeLibs=true;
  • minSdkVersion >= 23 并且 Android Gradle plugin >= 3.6.0Au cas où, lors de l'emballage android: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 aarAND 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 Sizegrand écart, mais les deux ont Download Sizeexactement 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:

Emballé comme aar

Emballé en apk

Deux types de méthodes d'emballage Rwa File Sizeavec Download Sizeun grand écart entre cela Raw File Sizeet Download Sizecomment 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 Sizeavec download file size: des
Raw File Sizereprésentants des tailles non compressées de l'entité correspondante sur le disque; des
Download Sizereprésentants de la taille correspondante de l'entité dans Google Play, une compression estimée; des
% of Total Download Sizereprésentants de l'entité de module correspondante, une part de la taille totale du pourcentage de taille de téléchargement.

Afficher les informations sur le fichier et la taille

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.

Taille du fichier brut de l'APK Android vs taille du téléchargement

AndroidManifest.xmlextractNativeLibsMode 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 = falseapk 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/lible donc sous le chemin, il n'y a pas d'opération de copie supplémentaire, relativement android:extractNativeLibs = trueparlant, é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:

android: description officielle de l'API extractNativeLibs

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.javalors de la lecture des android:extractNativeLibsvaleurs 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.xmlfichiers 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:extractNativeLibscette 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'emballage android:extractNativeLibs=true;
  • Si minSdkVersion >= 23 并且 Android Gradle plugin >= 3.6.0, lors de l'emballage android: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

========== LA FIN ==========

Bienvenue pour suivre mon compte officiel

Je suppose que tu aimes

Origine blog.csdn.net/weixin_48967543/article/details/115269878
conseillé
Classement