2015-06-12 48 views
1

我的應用程序具有在Gradle中定義的開發和生產風格。在我的製作風格中,我希望生成的APK文件不包含我的x86 jniLibs二進制文件。我只用它們在genymotion中測試,其中一些很大,所以我真的需要這個空間。排除生產中的jniLibs文件夾APK

我可以通過手動刪除我的src/main/jniLibs/x86文件夾然後構建,但每次構建時都必須執行此操作,然後稍後恢復這些庫。有沒有更簡單的方法使用gradle/proguard/something?

回答

10

這裏是排除86 SO文件的發佈版本變種配置:

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

而且,有86所以在「調試」打造變種輸出因爲沒有設置過濾器。

+0

驚人的,這工作。謝謝! –

+2

非常感謝您將完整的android.buildTypes.release.ndk結構放在那裏:當人們假定對整個事物很熟悉並且只引用最後幾個組件時,它將我推上了牆。 (是否有列表中列出的所有組件的圖表,其他人都知道,我沒有收到該帖子?) –

1

移動從app/src/main/jniLibs/x86的lib到app/src/debug/jniLibs/x86

+0

我創建了app/src/debug/jniLibs並將armeabi,armeabi-v7a和x86文件夾複製到其中。我從app/src/main/jniLibs中刪除了x86 /。當我重建並運行時,我得到「失敗[INSTALL_FAILED_NO_MATCHING_ABIS]」。另外,jniLibs駐留在我的庫android應用程序中,而不是特定的模塊。 –

+0

您是在發佈還是調試模式下構建?錯誤說沒有匹配的abis,你的代碼是否需要這些庫(當爲arm架構交叉編譯時)?如果是的話,你應該把'armeabi- *'放在'main'中,因爲它可以用於任何口味。只移動x86 libs outta'main'。 – mbmc

+0

我在調試模式下構建。似乎構建過程忽略了這個新的src/debug/jniLibs文件夾,因爲我刪除了x86,現在它在genymotion上失敗。但是,如果我安裝在手機上,它可以正常工作,因爲它仍然可以找到armeabi文件。如何在調試版本中告訴它打包新的src/debug/jniLibs文件夾? –