为什么APK包含v4支持资源?

时间:2018-10-24 20:33:52

标签: android

我的应用程序的sdk最低版本为16,并且我没有在gradle中添加v4支持。但是当我分析apk时,v4支持drawables是大量资源。我想知道为什么我的应用程序正在开发最低16版本时将它们包含在APK中。

v4软件包中已转换了png矢量图像。但我的应用不需要v4支持。

sc

compileSdkVersion 28
defaultConfig {
    minSdkVersion 16
    targetSdkVersion 28
    ...
}

我需要一个可以从APK中删除v4支持资源的解决方案,因此我的应用大小会大大减少。

我的依赖项是-

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'io.reactivex.rxjava2:rxjava:2.1.16'
    implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
    implementation 'com.android.volley:volley:1.1.0'
    implementation 'com.squareup.okhttp:okhttp:2.3.0'
    implementation 'com.google.android.gms:play-services-analytics:16.0.4'
    implementation 'com.google.firebase:firebase-core:16.0.4'
    implementation 'com.theartofdev.edmodo:android-image-cropper:2.3.+'
    implementation 'com.github.medyo:android-about-page:1.2.2'

    implementation 'com.ogaclejapan.smarttablayout:library:1.6.1@aar'
    implementation 'com.ogaclejapan.smarttablayout:utils-v4:1.6.1@aar'

    implementation 'com.squareup.picasso:picasso:2.3.2'
    implementation 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'
    implementation 'com.github.bumptech.glide:glide:3.7.0'
    implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.1.0'
    implementation 'com.github.ronaldsmartin:Material-ViewPagerIndicator:1.+'
    implementation('com.google.api-client:google-api-client-android:1.23.0') {
        exclude group: 'org.apache.httpcomponents'
    }
    implementation "com.intuit.sdp:sdp-android:$SDP_VERSION"
    implementation "com.intuit.ssp:ssp-android:$SDP_VERSION"
    implementation "com.squareup.retrofit2:retrofit:${RETROFIT_VER}"
    implementation "com.squareup.retrofit2:converter-gson:${RETROFIT_VER}"
    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
    implementation 'com.googlecode.libphonenumber:libphonenumber:8.0.1'
    implementation 'org.greenrobot:eventbus:3.1.1'
    implementation ('com.crashlytics.sdk.android:crashlytics:2.9.5@aar') {
        transitive = true
    }
    implementation 'com.tbuonomo.andrui:viewpagerdotsindicator:2.1.2'
}

1 个答案:

答案 0 :(得分:2)

支持库版本号表示最初支持的最低API级别。但是随着时间的流逝,旧的Android API级别已经过时了,它们会从库中删除,但是版本号却保持不变。因此,您不应将支持库的版本号视为与开发API目标的相关标识符。

通过查看您的Gradle,似乎可以将v4支持库作为依赖项包含在您所使用的第三方库之一中。

评论更新

您可以尝试在gradle中设置 minifyEnabled true ,但是我怀疑这会产生影响,因为这些资源被第三方依赖项使用。

对于您要问的问题,没有一种魔术子弹,而且在某种可能将其删除的设置中也没有直接解决方案。

您需要做的是调查哪些第三方依赖项正在使用支持库,并评估是否可以找到替代方法。仅举一个例子,我为您做了一些工作,但是您将需要检查所有依赖项:

com.ogaclejapan.smarttablayout:library 使用:

  • com.android.support:support-v4
  • com.android.support:support-v13

com.github.medyo:android-about-page 使用:

  • com.android.support:appcompat-v7

com.github.bumptech.glide:glide 使用:

  • com.android.support:support-fragment
  • com.android.support:support-v4
  • com.android.support:appcompat-v7

org.greenrobot:eventbus 使用:

  • com.android.support:support-v4