Android Studio .を使用し、次のバージョンのAndroid Gradleプラグインをproject/build.gradle
で使用する場合:
classpath 'com.Android.tools.build:gradle:3.0.1'
そして、それはうまく機能しています。 Android Studio .1に更新した後、結果としてAndroid Gradle Pluginを更新します。
classpath 'com.Android.tools.build:gradle:3.1.0'
そして今、app/build.gradle
でエラーが発生します:
def releaseFileName = "${rootProject.name}_${defaultConfig.versionName}.apk"
outputFileName = new File(rootProject.projectDir.absolutePath + "/release", releaseFileName.toLowerCase())
エラー:
出力ファイル名を設定する場合、絶対パスはサポートされません
出力apk(app-release.apk
)をプロジェクトの特定のパスに配置する必要があります。フォルダーMyProject/release/app-relese.apk
。どうすればいいですか?
「./../../../」を使用するのは悪い解決策だと思います...私はいくつかのプロジェクトに共通のgradleスクリプトを使用し、出力ディレクトリの深さから独立したコードにしたいです。
いくつかの調査の後、私はgradleプラグイン3.1.2のこのソリューションを見つけました:
applicationVariants.all { variant ->
variant.outputs.all { output ->
def relativeRootDir = output.packageApplication.outputDirectory.toPath()
.relativize(rootDir.toPath()).toFile()
output.outputFileName = new File( "$relativeRootDir/release", newOutputName)
}
}
これが役立つ場合に備えて、このエラーは、apkのファイル名に関連するものへの絶対パスを持つことが許可されていないことを意味します。私が必要なものを達成するために、プロジェクトの前後にAPKを添付することができます(APKをproject/app/build /フォルダに入れるには:
gradle 3.1.0の前
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = new File(
output.outputFile.parent,
output.outputFile.name)
}
}
INまたはAFTER gradle 3.1.
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = new File(
"./../../../../../build/",
output.outputFile.name)
}
}
同じ問題が発生しました。何が起こったのかを正確に把握する努力はしていませんが、簡単な修正があります。
新しいファイルからルートを削除して、フレームワークを信頼するだけです。つまり、コードを
outputFileName = new File("release", releaseFileName.toLowerCase())
それで十分でした。特定のフレーバーのapkの名前のみを考慮して、apkがどこに行くかは気にしません。
新しいファイル名をアセンブル/連結します:
def newFileName = "assemble-your-new-file-name"
次に、単純に割り当て直します。
outputFileName = newFileName
より具体的には以下の通り
Android.applicationVariants.all { variant ->
variant.outputs.each { output ->
// Redirect your apks to new defined location to outputDirPath
def outputDirPath = new File("${project.rootDir.absolutePath}/apks/${variant.flavorName}/${variant.buildType.name}")
variant.packageApplicationProvider.get().outputDirectory = outputDirPath
def apkFileName = "${rootProject.name}_${Android.defaultConfig.versionName}.apk"
output.outputFileName = apkFileName // directly assign the new name back to outputFileName
}
}
私は解決策を見つけました:
def releaseFileName = "${rootProject.name}_${defaultConfig.versionName}.apk"
outputFileName = "/../../../../../release/" + releaseFileName.toLowerCase()
出力ファイルapp-release.apk
がMyProject/release/app-relese.apk
で作成された成功
「variantOutput.getPackageApplication()is obsolete "」という警告を回避するには、variant.packageApplicationProvider.get().outputDirectory
を使用します
applicationVariants.all { variant ->
variant.outputs.each { output ->
variant.packageApplicationProvider.get().outputDirectory = new File(
project.rootDir.absolutePath + "/release")
def releaseFileName = "${rootProject.name}_${defaultConfig.versionName}.apk"
output.outputFileName = releaseFileName.toLowerCase()
}
}