2017-12-07 21 views
0

最近Gradle 3.0にアップグレードしましたが、出力APKの名前を変更する機能が変更されています。私はそれを回避することができると思うが、私はまだAPKのターゲットディレクトリを選ぶことができるかどうか疑問に思っている。私たちは、維持したい特定のAPK命名規則とディレクトリ構造を使用する既存のソフトウェアを持っています。これを行う方法はありますか?私はちょうど私がちょうどにすることを削除(デフォルトで設定されます「フレーバー寸法は」今そこにあることを知っているAndroid Gradle Plugin 3.0別のディレクトリに出力する

android { 
    compileSdkVersion 25 
    buildToolsVersion '25.0.3' 
    defaultConfig { 
     applicationId "com.mycompany.myapp" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 23 
     versionName "23.23.23" 
     compileOptions { 
      sourceCompatibility JavaVersion.VERSION_1_7 
      targetCompatibility JavaVersion.VERSION_1_7  } 
     signingConfig signingConfigs.config 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
      signingConfig signingConfigs.config 
     } 
    } 
    productFlavors.whenObjectAdded { flavor -> 
     // Add the property 'myCustomProperty' to each product flavor and set the default value to 'customPropertyValue' 
     flavor.ext.set('directoryPath', '') 
     flavor.ext.set('apkName', '') 
    } 
    productFlavors { 

     MyCompany { 
      signingConfig signingConfigs.config 
      directoryPath = mycompany 
     } 

     Copper { 
      applicationId c 
      signingConfig signingConfigs.config 
      directoryPath = 'copper' 
     } 

     Steel { 
      applicationId 'com.company2.steel' 
      signingConfig signingConfigs.config 
      directoryPath = 'steel' 
     } 

     Lead { 
      applicationId 'com.company3.coal' 
      signingConfig signingConfigs.config 
      directoryPath = 'coal' 
     } 

    } 


    applicationVariants.all { variant -> 
     variant.outputs.each { output -> 
      def path = "C:/AndroidBuilds/MyBuilds/" + variant.productFlavors[0].directoryPath + "/" 
      logger.error("Path = " + path) 
      def SEP = "-" 
      def apkName = variant.productFlavors[0].apkName 
      def flavor = variant.productFlavors[0].name 
      if (apkName != '') 
       flavor = apkName; 
      def version = variant.versionCode 
      def newApkName = path + version + SEP + flavor 
      logger.error("newApkName = " + newApkName) 
      output.outputFile = new File(newApkName + ".apk") 
     } 
    } 
} 

:ここ

は私の現在のGradleのビルド構造(簡素化され、無実を保護するために改称)でありますコードを少し明確にする)。このビルドを実行した結果、4つの異なるAPKが生成され、バージョン番号が前に付いた独自のディレクトリ構造(「64-Iron.apk」など)に配置されるはずです。

"outputfile"と置き換えても名前は機能しますが、ディレクトリ構造には反映されません。最新のGradleでこれを行う新しい方法はありますか?

android { 
    compileSdkVersion 26 
    defaultConfig { 
     applicationId "com.mycompany.myapp" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 23 
     versionName "23.23.23" 
     compileOptions { 
      sourceCompatibility JavaVersion.VERSION_1_7 
      targetCompatibility JavaVersion.VERSION_1_7  } 
     signingConfig signingConfigs.config 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
      signingConfig signingConfigs.config 
     } 
    } 
    productFlavors.whenObjectAdded { flavor -> 
     // Add the property 'myCustomProperty' to each product flavor and set the default value to 'customPropertyValue' 
     flavor.ext.set('directoryPath', '') 
     flavor.ext.set('apkName', '') 
    } 
    productFlavors { 

     MyCompany { 
      signingConfig signingConfigs.config 
      directoryPath = mycompany 
     } 

     Copper { 
      applicationId c 
      signingConfig signingConfigs.config 
      directoryPath = 'copper' 
     } 

     Steel { 
      applicationId 'com.company2.steel' 
      signingConfig signingConfigs.config 
      directoryPath = 'steel' 
     } 

     Lead { 
      applicationId 'com.company3.coal' 
      signingConfig signingConfigs.config 
      directoryPath = 'coal' 
     } 

    } 

    applicationVariants.all { variant -> 
     variant.outputs.all { 
      def apkName = variant.productFlavors[0].apkName 
      def flavor = variant.productFlavors[0].name 
      if (apkName != '') 
       flavor = apkName; 
      //add here your logic to customize the name of the apk 
      outputFileName = "${variant.versionCode}-${flavor}.apk" 
     } 
     variant.assemble.doLast { assemble -> 
      //copy the apk in another directory, add here your 
      //logic to customize the destination folder 
      copy { 
       from variant.outputs*.outputFile 
       into "C:/AndroidBuilds/MyBuilds//${variant.productFlavors[0].directoryPath}" 
      } 
      //if you don't want to delete the file after copying it comment the line below 
      delete variant.outputs*.outputFile 
     } 
    } 
} 

ありがとう:

UPDATE完全を期すため、ここでは(再び、無実を保護するために洗浄)最終Gradleの設定で、選択したソリューションが提供する情報に

感謝を(固定)再びMatPag!

答えて

3

私はそれはあなたのニーズに基づいてフォルダをカスタマイズするには良い出発点だと思う私はGradleの4.2.1と3.0.0 AGPでビットを果たしてきた、と可能な解決策はこの1つ

applicationVariants.all { variant -> 
    variant.outputs.all { 
     //add here your logic to customize the name of the apk 
     outputFileName = "${variant.name}-${variant.versionName}.apk" 
    } 
    variant.assemble.doLast { assemble -> 
     //copy the apk in another directory, add here your 
     //logic to customize the destination folder 
     copy { 
      from variant.outputs*.outputFile 
      into "C:/my_apks/${variant.dirName}" 
     } 
     //if you don't want to delete the file after copying it comment the line below 
     delete variant.outputs*.outputFile 
    } 
} 

です:)

+0

甘い。有望に見えます...私はそれを試して、それがトリックかどうかを見てみましょう。ありがとう! –

+0

@StephenMcCormick私にそれを知らせてください;) – MatPag

+1

他のいくつかのGradleの問題を修正した後、それは魅力的に機能しました!ありがとう、素晴らしい仕事! –

関連する問題