即使我没有使用任何繁重的工具,我的android apk约为22MB。在分析了apk文件之后,我发现了一个目录“ lib”,其中包含用于不同体系结构的文件名“ libclasifier_jni.so”,我不确定它来自何处。 下面是相同的屏幕截图
你能告诉我我在这里想念什么吗?
下面是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'
答案 0 :(得分:1)
android的apk中的libclasifier_jni.so是什么?
您已经使用了Firebase Vision图像库,其中包含这些SO文件。
compile 'com.google.firebase:firebase-ml-vision-image-label-model:15.0.0'
我的android apk约为22MB
如果您在应用中使用Fragment Vision库,则不得通过任何gradle配置从apk中排除这些ndk文件。
什么是解决方案?
尽管您应该构建一个APK以支持所有目标 设备,可能会导致APK很大 到支持多种屏幕密度或应用程序所需的文件 二进制接口(ABI)。减少APK大小的一种方法是 创建多个包含特定屏幕密度文件的APK 或ABI。
Play商店支持拆分apk,您可以在其中为multiple cpu ABI创建多个apk。您的应用中有4 SO files。每个大小为3-4MB。因此,如果您使用拆分APK,那么每个APK都会减少不必要的12MB。
armeabi-v7a
and arm64-v8a
让我告诉您有关ABI百分比静态的有用信息。如果您不太在乎所有的ABI,则可以包括两个ABI ndks。几天前,我发布了详细的静力学 Answer Here ,这将帮助您进一步了解ABI百分比。
因此,如果您包含armeabi-v7a
和arm64-v8a
体系结构,那么您将覆盖99%的Android设备。
这是您可以在APK中仅包含这两个ABI的方式。
buildTypes {
release {
ndk {
abiFilters "arm64-v8a", "armeabi-v7a"
}
}
This blog将帮助您为多个APK和ABI过滤器配置gradle,并更好地了解ABI管理。另外我必须说Google's Android page拥有您所需的完美信息。
答案 1 :(得分:0)
这是本机库,已编译并与您的apk相连。检查您的cmake脚本或ndk Android.mk文件。如果您不确定它来自哪里,则也可以将其从适用于不同体系结构的apk中排除。在您的gradle里面写下这些行
private secureKey = CryptoJS.enc.Base64.parse('123456789101234567890123456789011');
private secureIV = CryptoJS.enc.Base64.parse('1234567891123456');
var encrypted = CryptoJS.AES.decrypt(myText, this.secureKey, {
iv: this.secureIV
});
console.log('DecryptedData: '+encrypted);
答案 2 :(得分:0)
此特定的库来自此依赖项:
compile 'com.google.firebase:firebase-ml-vision-image-label-model:15.0.0'
您可以转到工件link,下载aar并将其解压缩。您将看到如下图所示的内容: