2015-01-15 9 views
16

「abi」で「分割」を使用したいが、リリースビルドにのみ使用する。これは可能ですか? ext変数と変数defをデフォルトでfalseに設定してみます。この変数は、releaseWithLog(およびrelease)のbuildTypesでtrueに設定されます。Android Gradle - リリースでのみスプリットを使用しますか?

しかし、私はwriteln()に "debug"、 "releaseWithLog"、 "release"にテストメッセージを追加してビルドを実行すると、すべてのメッセージが出力されるので、これは私に確信しています。私はデバッグ用にビルドしていますが、変数 "splitsEnabled"はtrueに設定されています。そして、デバッグ用に値 "false"を期待しています(デバッグ用に分割を使用しません)。フィールドのAndroid StudioでのGradleのタスクのために:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 19 
    buildToolsVersion '20.0.0' 
    ext { 
     splitsEnabled = false 
    } 
    defaultConfig { 
    ... 
    } 
    buildTypes { 
     debug { 
      ... 
     } 
     releaseWithLog { 
      ... 
      splitsEnabled = true 
     } 
     release.initWith(releaseWithLog) 
     release { 
      ... 
     } 
    } 
    ... 
    splits { 
     abi { 
      println(splitsEnabled) 
      enable splitsEnabled 
      reset() 
      include 'x86', 'armeabi-v7a', 'armeabi' 
      exclude 'x86_64', 'mips64', 'arm64-v8a', 'mips' 
      universalApk true 
     } 
    } 
    ... 
+0

splits'は 'buildTypes'のピアである'ので、私は分割ごとのタイプに基づいて行うことができないと思われるが、私は間違って証明させていただきます。しかし、 'enable splitsEnabled'はビルドタイプが選択される前に実行されることに注意してください。 'build.gradle'のステートメントは主にオブジェクトモデルを構築しています。これは翻訳されたスクリプトではありません。オブジェクトモデルが構築された後でさえ、Gradleは実行されているタスクに必要なビルドタイプを把握し始めます。 – CommonsWare

+0

私も興味があります。ビルド時間を節約し、デバッグで1つの分割を作成するのが大好きです –

+0

この問題を解決するためにABIビルドを行う古い方法に戻ってしまいました。 https://twitter.com/silentnuke/status/619501266646003713 –

答えて

5

あなたはGradleのにコマンドライン引数、または「スクリプトパラメータ」で簡単にこの問題を解決することができます。私は「dbgBld」記号を定義するために-Pを使用し、デバッグビルドのためにそれを使用し、例えば:

gradle -PdbgBld installDebug 

私のbuild.gradleファイルには、次の分割コマンドを持っている:

splits { 
    abi { 
     enable !project.hasProperty('dbgBld') 
     reset() 
     include 'armeabi', 'armeabi-v7a', 'x86', 'mips' 
     universalApk true 
    } 
} 

私が使用してリリースをビルドします:

gradle assembleRelease 

「dbgBld」記号が定義され、その分割は、フィールドがtrueに解決可能と私は5つのAPKファイルを取得されていません。デバッグのためにビルドするとき、-PdbgBldは既にAndroid Studio設定に保存されており、デバッグ用に1つの "fat" APKしか得られません。その結果、より高速なデバッグビルドが可能になります。

グレッグ

+0

これは本当に便利です。 – speedynomads

+0

Android Studioの実行/デバッグの起動設定でこれを設定する方法はありますか? – romulof

+0

@ Orb私はAndroid Studioの実行/デバッグの起動設定が "Grade-aware Make"コマンドを実行することを確認しました。私はこのためのオプションを編集する場所がわかりませんが、実際のリリースビルドをビルドするには、まだ 'gradle assembleRelease'を実行する必要があります。私は条件を逆にして、releaseBld定数のようなものを定義し、 'gradle -PreleaseBld assembleRelease'を持ってbuild.gradleをそれに応じて修正します。 – gregko

関連する問題