2013-06-18 14 views
6

Android Studio GradleのI/Oを見たことがある人もいるので、Xavier Ducrohetは彼の速いスピーチでアンドロイドのグラデルビルドシステムの使い方を述べました。私の問題は、ドキュメンテーションとプレゼンテーションが速いスタートを得るための情報がないことです。少なくとも私のために。私の次のコードでは、私はgradleのアンドロイドプラグインシステムと私はいくつかのステップを間違っていくつかの権利があると確信しているの使用を解決しようとしました。 (私はアリやmavenをたくさん使っていません)Android Studio Gradleファーストステップ

多分私はこれまでに何をしてきたのかを一歩一歩進みます。デバッグビルドのデフォルト設定構成する第1のIMで

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 

     signingStoreLocation = "debug.keystore" 
     signingStorePassword = "***************" 
     signingKeyAlias = "***************" 
     signingKeyPassword = "**************" 
    } 

(またはデフォルトsettings..thatを使用するすべてのビルドにはbuildtypesや風味を意味していない?)

sourceSets:

sourceSets { 

     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject'] 
      res.srcDirs = ['res', 'resfromotherprojectusingpartsofsamecode'] 
      assets.srcDirs = ['assets'] 
     } 
    } 

でこのステップではsourceSetsを定義しました。これが私の最初の質問です。私は二つのプロジェクトに使用する同じコードを持っていれば、それは可能です/またはそれのような多くのsourcesetsを定義し実行する必要があります - >

sourceSets { 

     main {...} 
     srcsetforanotherproject {...} 
    } 

...基礎となるのsrcフォルダに依存しますか?あるいは、sourceSetsの定義は、私の最初のsourceSets宣言のように、Xavier Ducrohetのようなresフォルダのような異なるセットを定義することによって行うべきですか? (また、私はこのようにresフォルダに対してもjava.srcDirs = ['com.project.maingradle'、 'com.otherproject.changedsourcefilesforthisproject']のようなjava srcコードフォルダに対してもこれを行うことができるかどうかはっきりしない。

signingConfigs:私は別のリリースのために使用して別のキーを定義したこのステップで

signingConfigs { 
     debugRelease { 
      storeFile file("debug.keystore") 
     } 

     release { 
      storeFile file("release.keystore") 
     } 

     testflight { 
      storeFile file("testflight.keystore") 
     } 
    } 

大丈夫でなければなりません...

buildTypes:。

buildTypes { 

     debugRelease.initWith(buildTypes.release) 
     testflight.initWith(buildTypes.release) 

     sourceSets.debugRelease.setRoot("src/release") 
     sourceSets.debugRelease.setRoot("src/release") 
     sourceSets.debugRelease.setRoot("src/release") 

     debugRelease { 
      packageNameSuffix ".debugRelease" 
      versionNameSuffix "-DEBUG" 
      debuggable true 
      signingConfig signingConfigs.debug 
     } 

     testflight { 
      packageNameSuffix ".testflight" 
      versionNameSuffix "-TESTFLIGHT" 
      signingConfig signingConfigs.testflight 
     } 

     release { 
      packageNameSuffix ".release" 
      versionNameSuffix "-RELEASE" 
      runProguard true 
      proguardFile getDefaultProguardFile('proguard-android.txt') 
      signingConfig signingConfigs.release 
     } 
    } 

このステップは、gradle android pluginの他のステップよりも明確に説明されています。ただし、あらかじめ定義されたリリースやデバッグ設定がバックグラウンドで動作しているかどうかはわかりません...とにかくそれを明確にする必要があります...少なくとも私はnamesuffixes、proguard、またはこのビルドの鍵(signingConfig)。

味:個人的に

flavorGroups "abi", "version" 

    productFlavors { 

     arm { 
      flavorGroup "abi" 
     } 

     standardproject1 { 
      flavorGroup "version" 
      minSdkVersion 7 
      targetSdkVersion 14 
      packageName "com.project.maingradle.normal" 
      sourceSet sourceSets.main 
     } 

     standardproject2 { 
      flavorGroup "version" 
      minSdkVersion 6 
      targetSdkVersion 14 
      packageName "com.otherproject.normal" 
      sourceSet sourceSets.main 
     } 

     testflightproject1 { 
      flavorGroup "version" 
      minSdkVersion 7 
      targetSdkVersion 14 
      packageName "com.project.maingradle.testflight" 
      sourceSet sourceSets.main 
     } 

     testflightproject2 { 
      flavorGroup "version" 
      minSdkVersion 6 
      targetSdkVersion 14 
      packageName "com.otherproject.testflight" 
      sourceSet sourceSets.main 
     } 
    } 
} 

私は味が最も興味深い部分だと思います。 Xavier Ducrohetは、さまざまなフレーバービルドに異なるキーを使用する場合は、ビルドタイプでキーを定義しないでください(代わりにフレーバーで宣言されています)。私はそれが正しく理解されているか分かりません。

とにかく私がここでやろうとしていたのは、さまざまな設定(例えば、異なるシステム用のバージョニング、専用のパッケージ名、設定したソースセットの設定など)でビルドする必要があるさまざまなフレーバーを定義することです。どのようなビルドタイプがフレーバーに依存しているかはわかりません...すべてのビルドタイプにすべての味を乗せますか?そして...ソースセットを設定しても構いません(ソースセットをさらに設定できる場合)

+0

私は同様のものを試しました。あなたのリリースapk、 'gradle build'に署名するためにあなたはコマンドを実行しますか?私は私の 'build/apk'フォルダに署名されていないapkファイルしか見ません。 –

+0

優秀な質問、gradleドキュメントはひどいです – Piotr

+0

sourceSets.debugRelease.setRoot( "src/release")を意図的に3回繰り返していますか? –

答えて

1

ビルドタイプがフレーバーに依存する仕組み...すべてのフレーバーをすべてのビルドタイプに乗算するだけですか?

はい、Gradleはビルドタイプと製品の味のすべての組み合わせを生成します。 Gradle Plugin User Guideによると、それぞれのビルドタイプと製品フレーバーの組み合わせは、ビルドバリアントと呼ばれます。

ソースセットを設定しても問題ありません(sourceSetsをさらに設定することができれば)?

確かに!製品フレーバー(およびビルドバリアント)には、Sourcesets and Dependencies documentationのように、src/myFlavorNameの独自のソースセットも自動的に含まれます。

関連する問題