2017-12-14 15 views
0

:何らかの理由で、多くの記事のためののAndroid APKアーティファクトの名前は、私が抽出し、出力ファイル名構成するアーティファクトのアーキテクチャを使用しようとしています

void defineDefaultVariantsAPK(String appName) { 
    defineVariantsAPK({ variant, output -> 
     def versionName = variant.versionName 
     def versionCode = "-(${variant.versionCode}" 
     def buildLetter = variant.buildType.name == "release" ? "-R" : "-D" 
     def flavor = variant.productFlavors.size() > 0 ? "-${variant.productFlavors[0].name}" : "" 
     def architecture = "-" + output.getFilter(com.android.build.OutputFile.ABI) 

     "v${versionName}${versionCode}${buildLetter}${flavor}${architecture}--${appName}.apk" 
    }) 
} 

void defineVariantsAPK(Closure nameBuild) { 
    android { 
     applicationVariants.all { variant -> 
      variant.outputs.each { output -> 
       output.outputFile = new File((String) output.outputFile.parent, nameBuild(variant, output)) 
      } 
     } 
    } 
} 

はそれが解決策ですが、と言います

unable to resolve class com.android.build.OutputFile 

configu:私はインポートを使用しようとした

> Could not get unknown property 'com' for project ':app' of type org.gradle.api.Project. 

:に私のGradleは失敗します配給:

com.android.tools.build:gradle:2.3.3 
Gradle version 3.5 

私は実際には何が違うのですか?

+0

この関数をどこで定義しましたか?あなたの 'app/build.gradle'ファイルを移動してみてください。それは、buildscriptがどこにあるかのようにクラスパスにクラスをロードします。 – Blaz

+0

神々で...私はこの行 "import com.android.build.OutputFile"を追加し、それはちょうど私の目の前で消える...私のMacは所有している... – TacB0sS

+0

@blazsolar、解答を投稿してください。私はあなたに私が解決策に一歩近づいたように、あなたに報いることができます:) – TacB0sS

答えて

1

どこでこの関数を定義しましたか?それをあなたのapp/build.gradleファイルに移動してみてください。それは、buildscriptがどこにあり、クラスパスからclasspathにクラスをロードします。

applicationVariants.all { variant -> 
    variant.outputs.all { output -> 
     def appName = "AppName_" 
     def buildType = variant.variantData.variantConfiguration.buildType.name 
     def architecture = output.getFilter(com.android.build.OutputFile.ABI) 
     def newName 
     if (buildType == 'debug') { 
      newName = "${appName}debug_${defaultConfig.versionName}_${architecture}.apk" 
     } else { 
      newName = "${appName}release_${defaultConfig.versionName}_${architecture}.apk" 
     } 
     outputFileName = newName 
    } 
} 

*あなたのモジュール(アプリ)build.gradleファイルでこれを置く:GradleのでBeggining

+0

私は一般的な私の人工物の名前を定義するために使用される一般的なgradleファイルでこの関数を定義しました:https://github.com/nu-art/dev-tools/blob/master/gradle/utils.gradle – TacB0sS

0

私はインポートを追加しようとしたときにGradleのファイルを構築する私はアプリにメソッドを移動した@blazsolar提案以下、動き自体は、ソリューションではありませんでした:

import com.android.build.OutputFile 

何らかの理由IDEのために(Androidのスタジオは)..インポートを削除する

を決定しましたが、私はこのインポートしたら:

import com.android.build.OutputFile.FilterType 

をそれだけで大丈夫でした! しかしそれはそれの終わりではありません...私は共通のグラデルファイルにあるメソッドを、すべての私のプロジェクトが再利用できるようにします。

:私はまだanother question


アップデートが残っています

私は共通のGradleファイルへの最後のインポートを追加しました...輸入figgingが再び姿を消した後

.. Androidプラグインとバージョンをそれぞれ3.0.1と4.1にアップデートしましたが、今は変更されています...

com.android.build.OutputFile.FilterType 

今あなたが使用する必要があります。

com.android.build.VariantOutput.ABI 

誰もが疑問に思う念のために...

0

は、あなたがこのようにそれを行うことができます3.0.0。

関連する問題