什么是android apk中的libclasifier_jni.so?

时间:2018-10-20 11:14:34

标签: android android-studio apk

即使我没有使用任何繁重的工具,我的android apk约为22MB。在分析了apk文件之后,我发现了一个目录“ lib”,其中包含用于不同体系结构的文件名“ libclasifier_jni.so”,我不确定它来自何处。 下面是相同的屏幕截图enter image description here

你能告诉我我在这里想念什么吗?

下面是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'

3 个答案:

答案 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文件。

什么是解决方案?

1. Build multiple APKs

  

尽管您应该构建一个APK以支持所有目标   设备,可能会导致APK很大   到支持多种屏幕密度或应用程序所需的文件   二进制接口(ABI)。减少APK大小的一种方法是   创建多个包含特定屏幕密度文件的APK   或ABI。

Play商店支持拆分apk,您可以在其中为multiple cpu ABI创建多个apk。您的应用中有4 SO files。每个大小为3-4MB。因此,如果您使用拆分APK,那么每个APK都会减少不必要的12MB。

2. Include only armeabi-v7a and arm64-v8a

让我告诉您有关ABI百分比静态的有用信息。如果您不太在乎所有的ABI,则可以包括两个ABI ndks。几天前,我发布了详细的静力学 Answer Here ,这将帮助您进一步了解ABI百分比。

  • armeabi-v7a(必需-当今最流行的体系结构)
  • arm64-v8a(必需-armeabi-v7a的较新版本)
  • x86(可选,设备数量非常有限,例如Asus Zenfone 2,Genymotion / Android模拟器)
  • x86_64(可选,设备数量非常有限,例如Asus Zenfone 2,Genymotion / Android模拟器)

因此,如果您包含armeabi-v7aarm64-v8a体系结构,那么您将覆盖99%的Android设备。

这是您可以在APK中仅包含这两个ABI的方式。

buildTypes {
    release {
        ndk {
            abiFilters "arm64-v8a", "armeabi-v7a"
        }
    }

image

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并将其解压缩。您将看到如下图所示的内容:

enter image description here