Мой apk для Android составляет около 22 МБ, даже если я не использовал ничего тяжелого. Проанализировав файл apk, я обнаружил каталог «lib», который содержит имя файла «libclasifier_jni.so» для разных архитектур, я не уверен, откуда он.
ниже скриншот для same
Не могли бы вы сказать мне, что мне здесь не хватает?
Ниже build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.pixyfisocial"
minSdkVersion 15
targetSdkVersion 27
versionCode 24
versionName '5.0.0'
multiDexEnabled true
testApplicationId "com.pixyfisocial.screens.presenters"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
}
productFlavors {
}
}
configurations {
all {
exclude module: 'json'
exclude module: 'commons-logging'
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
testImplementation 'junit:junit:4.12'
testCompile 'org.powermock:powermock-api-mockito2:1.7.4'
// https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4
testCompile 'org.powermock:powermock-module-junit4:1.7.4'
// https://mvnrepository.com/artifact/org.mockito/mockito-core
testCompile 'org.mockito:mockito-core:2.8.9'
implementation 'de.hdodenhof:circleimageview:2.2.0'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
compile 'com.android.support:appcompat-v7:27.1.1'
compile 'com.android.support:recyclerview-v7:27.1.1'
compile 'com.android.support:cardview-v7:27.1.1'
compile 'com.android.support:design:27.1.1'
implementation 'com.facebook.android:facebook-android-sdk:4.33.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.github.clans:fab:1.6.2'
compile 'com.theartofdev.edmodo:android-image-cropper:2.7.+'
implementation 'com.google.firebase:firebase-core:16.0.0'
implementation 'com.google.firebase:firebase-messaging:17.1.0'
compile 'com.facebook.android:account-kit-sdk:4.+'
compile 'com.android.support:support-v4:27.1.1'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.google.firebase:firebase-appindexing:15.0.1'
compile 'com.google.firebase:firebase-auth:16.0.1'
compile 'com.google.android.gms:play-services-auth:15.0.1'
compile 'com.google.firebase:firebase-invites:16.0.0'
compile 'com.android.support:customtabs:27.1.1'
compile 'com.google.firebase:firebase-ml-vision:16.0.0'
compile 'com.google.firebase:firebase-ml-vision-image-label-model:15.0.0'
compile 'com.github.greenfrvr:hashtag-view:1.3.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'
implementation project(':pixyfi-data')
implementation project(':pixyfi-services')
implementation project(':utility')
}
apply plugin: 'com.google.gms.google-services'
Это собственная библиотека, скомпилированная и прикрепленная к вашему apk. проверьте свой сценарий cmake или файлы ndk Android.mk. если вы не уверены, откуда он исходит, вы также можете исключить его из своего apk для разных архитектур. В вашем градиенте внутри напишите эти строки
android{
packagingOptions {
exclude 'lib/arm64-v8a/libclasifier_jni.so'
exclude 'lib/armeabi/libclasifier_jni.so'
exclude 'lib/armeabi-v7a/libclasifier_jni.so'
exclude 'lib/mips/libclasifier_jni.so'
exclude 'lib/mips64/libclasifier_jni.so'
exclude 'lib/x86/libclasifier_jni.so'
exclude 'lib/x86_64/libclasifier_jni.so'
}
}
Эта конкретная библиотека исходит из этой зависимости:
compile 'com.google.firebase:firebase-ml-vision-image-label-model:15.0.0'
Можно зайти в артефакт ссылка, скачать aar и разархивировать. Вы увидите содержимое, подобное изображению ниже:
What is libclasifier_jni.so in android's apk?
Вы использовали библиотеку изображений Firebase Vision, содержащую эти файлы SO.
compile 'com.google.firebase:firebase-ml-vision-image-label-model:15.0.0'
My android apk is around 22MB
Вы не должны исключать эти файлы ndk из apk через любую конфигурацию gradle, если вы используете библиотеку Fragment Vision в своем приложении.
Какое решение?
Although you should build a single APK to support all your target devices whenever possible, that might result in a very large APK due to files needed to support multiple screen densities or Application Binary Interfaces (ABIs). One way to reduce the size of your APK is to create multiple APKs that contain files for specific screen densities or ABIs.
Play Store поддерживает разделение apk, в котором вы можете сделать несколько apk для несколько процессоров ABI. В вашем приложении есть 4 SO файла. Каждый из них имеет размер 3-4 МБ. Поэтому, если вы используете разделенный APK, ненужные 12 МБ будут уменьшены в каждом APK.
armeabi-v7a и arm64-v8a.Позвольте мне рассказать вам полезную информацию о процентной статике ABI. Если вас не интересуют все ABI, вы можете включить два ndk ABI. Ранее я опубликовал подробную статистику Ответить здесь, которая поможет вам лучше понять процентное соотношение ABI.
Таким образом, если вы включите архитектуры armeabi-v7a и arm64-v8a, вы охватите 99% устройств Android.
Таким образом вы можете включить в свой APK только эти два ABI.
buildTypes {
release {
ndk {
abiFilters "arm64-v8a", "armeabi-v7a"
}
}
Этот блог поможет вам настроить градиент для нескольких APK и фильтров ABI и лучше понять управление ABI. Также я должен сказать, что у Страница Google Android есть идеальная информация, которая вам нужна.
Вот почему я предложил сначала создать несколько apk.
добавление
x86всегда полезно, чтобы иметь возможность тестировать с эмулятором ... по крайней мере, для отладочных сборок - иначе он просто раздувает пакет; есть даже несколько аппаратных устройств Androidx86(предлагается использовать App Bundle - чтобы поддерживать, но не раздувать).