2016-04-12 18 views
2

サイズが4MBのAPKファイルだったAndroidアプリケーションを作成しています。数週間前、署名付きアプリを作成するときに生成されるAPKファイルは約17MBです。libディレクトリのためにAndroid APKファイルが大きすぎます

なぜこのようなことが起こったのか調べたところ、新しいAPKアーカイブには、サイズが4MBの古いAPKには存在しない/libディレクトリが含まれていることがわかりました。誰もがなぜこのlibディレクトリがAPKアーカイブに突然現れ、それを削除する方法があるのか​​知っていますか? APKアーカイブ内の/libディレクトリの

構造は次のとおりです。

/lib 
    /arm64-v8a 
    /armeabi 
    /armeabi-v7a 
    /mips 
    /x86 
    /x86_64 

私は最近2.0にAndroidのメーカーを更新してもGradleのをアップグレードしました。これは問題であり、この問題を解決するいくつかの設定パラメータがありますか?

マイGradleのファイルは次のようになります。

buildscript { 
    repositories { 
     mavenCentral() 
     maven { url 'https://maven.fabric.io/public' } 

    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.0.0' 
     classpath 'io.fabric.tools:gradle:1.+' 

    } 
} 

apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 

repositories { 
    mavenCentral() 
    maven { url 'https://maven.fabric.io/public' } 
    flatDir { dirs 'aars' } 
} 

android { 
    // when changing this, YOU MUST change C:\AndroidADT\sdk\build-tools\xx.yy.zz\dx.bat to have -> set java_exe=C:\Windows\System32\java.exe 
    compileSdkVersion 21 
    buildToolsVersion "21.1.1" 

    defaultConfig { 
     minSdkVersion 11 
     targetSdkVersion 21 
    } 
    def homeDir = System.getenv('HOMEDRIVE') + System.getenv('HOMEPATH'); 

    signingConfigs { 
     cinema { 
      storeFile = file("keystore\\cinema.keystore.jks") 
      storePassword = "cinema" 
      keyAlias = "cinema" 
      keyPassword = "cinema" 
     } 
     dev { 
      storeFile = file("keystore\\development.keystore.jks") 
      storePassword = "development" 
      keyAlias = "development" 
      keyPassword = "development" 
     } 
    } 

    buildTypes { 
     debug { 
      applicationIdSuffix ".debug" 
     } 
     cinema { 
      debuggable false 
      signingConfig signingConfigs.cinema 
      jniDebuggable false 
      applicationIdSuffix ".cinema" 
     } 
     dev { 
      debuggable true 
      signingConfig signingConfigs.dev 
      jniDebuggable true 
      applicationIdSuffix ".dev" 
     } 
    } 

    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src', 'src-gen'] 
      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 
      renderscript.srcDirs = ['src'] 
      res.srcDirs = ['res'] 

      assets.srcDirs = ['assets'] 
     } 
     debug { 
     } 
     dev { 
      res.srcDirs = ['res_dev'] 
     } 
     cinema { 
      res.srcDirs = ['res_cinema'] 
     } 
     androidTest.setRoot('tests') 
    } 


    packagingOptions { 
     exclude 'META-INF/NOTICE.txt' 
     exclude 'META-INF/LICENSE.txt' 
    } 
} 

dependencies { 
    compile 'joda-time:joda-time:2.3' 
    compile 'com.android.support:support-v4:21.0.0' 
    compile 'com.android.support:appcompat-v7:21.0.0' 
    compile 'com.google.android.gms:play-services-plus:8.3.0' 
    compile 'com.google.android.gms:play-services-auth:8.3.0' 
    compile 'com.google.android.gms:play-services-gcm:8.3.0' 
    compile 'com.facebook.android:facebook-android-sdk:4.5.0' 
    compile 'com.markupartist.android.widget:pulltorefresh:[email protected]' 
    compile 'com.paypal.sdk:paypal-android-sdk:2.13.3' 
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 
    compile files('libs/gson-2.2.4.jar') 
    compile files('libs/twitter4j-core-4.0.2.jar') 
    compile files('libs/core-3.1.0.jar') 
    compile files('libs/estimote-sdk-preview.jar') 

    compile files('libs/commons-codec-1.10.jar') 
    compile files('libs/commons-lang-2.6.jar') 
    compile files('libs/FastPaySDK_pro.jar') 
} 
+0

除外/ lib – Sibidharan

+0

@Sibidharan私はAndroidプログラミングの初心者です。 Android Studioでどうすればいいですか? – cakan

+0

あなたは味のAPKを作成していますか?リリースまたはデバッグまたはテスト? – Sibidharan

答えて

1

SOリリースビルド

android { 
buildTypes { 
    release { 
     ndk { 
      abiFilters "armeabi-v7a", "armeabi" // includes ARM SO files only, so no x86 SO file 
     } 
    } 
    } 
} 

からファイルを除外するために、これを試してみてくださいがテストしていませんが、多分あなたは試してみることができます:abiFiltersを「」除外しますすべての.SOファイル

2

問題は、card.ioライブラリを含むPayPal SDKによって生成されました。私は私の問題の解決策がdisable card.io card scanningにあることを発見した:

packagingOptions { 
    exclude 'lib/arm64-v8a/libcardioDecider.so' 
    exclude 'lib/arm64-v8a/libcardioRecognizer.so' 
    exclude 'lib/arm64-v8a/libcardioRecognizer_tegra2.so' 
    exclude 'lib/arm64-v8a/libopencv_core.so' 
    exclude 'lib/arm64-v8a/libopencv_imgproc.so' 
    exclude 'lib/armeabi/libcardioDecider.so' 
    exclude 'lib/armeabi-v7a/libcardioDecider.so' 
    exclude 'lib/armeabi-v7a/libcardioRecognizer.so' 
    exclude 'lib/armeabi-v7a/libcardioRecognizer_tegra2.so' 
    exclude 'lib/armeabi-v7a/libopencv_core.so' 
    exclude 'lib/armeabi-v7a/libopencv_imgproc.so' 
    exclude 'lib/mips/libcardioDecider.so' 
    exclude 'lib/x86/libcardioDecider.so' 
    exclude 'lib/x86/libcardioRecognizer.so' 
    exclude 'lib/x86/libcardioRecognizer_tegra2.so' 
    exclude 'lib/x86/libopencv_core.so' 
    exclude 'lib/x86/libopencv_imgproc.so' 
    exclude 'lib/x86_64/libcardioDecider.so' 
    exclude 'lib/x86_64/libcardioRecognizer.so' 
    exclude 'lib/x86_64/libcardioRecognizer_tegra2.so' 
    exclude 'lib/x86_64/libopencv_core.so' 
    exclude 'lib/x86_64/libopencv_imgproc.so' 
} 

または完全card.ioライブラリ除外する:

dependencies { 
    compile('com.paypal.sdk:paypal-android-sdk:2.14.1') { 
     exclude group: 'io.card' 
    } 
} 

を、私はこれが誰かを助けることを願っています。

関連する問題