これまでのところ、「build.gradle」の最後に以下を追加しました
task copyFiles(type: Copy)
copyFiles {
description = 'Copies html5 files from the common library...'
from '../../www'
into 'assets/www'
include('**/*')
}
Androidソースをコンパイルする前に)毎回このタスクを実行する方法についていくつかの助けが必要です。コマンドラインから手動でコピータスクを実行できますが、実行させたいですAndroidスタジオで[実行]をクリックすると、.
以下の提案の助けを借りて、私は追加しました
clean.dependsOn copyFiles
clean.mustRunAfter copyFiles
この追加により、rebuild-> runを実行して、コピータスクを実行できます。何もないよりはましですが、再構築ステップをスキップするのがいいでしょう。
Android studio。で使用しているbuild.gradle全体を以下に示します。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'Android'
dependencies {
compile files('/libs/acra-4.3.0.jar')
}
Android {
compileSdkVersion 17
buildToolsVersion "17"
defaultConfig {
minSdkVersion 8
targetSdkVersion 17
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src','libs']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest.setRoot('tests')
}
}
task copyFiles(type: Copy)
copyFiles {
description = 'Copies html5 files from the common library...'
from '../../www'
into 'assets/www'
include('**/*')
}
clean.dependsOn copyFiles
clean.mustRunAfter copyFiles
この方法で、Android-gradleビルドシステムでファイルアセットのカスタムコピーを実行します
preBuild.dependsOn copyFiles
これは、私が使用しているモジュールのbuild.gradleで、ビルド前のタスクとして必要なファイルを正常にコピーします。 「into」はJavaのFileクラスをモデルにしているため、その使用方法はよく知っているはずです。末尾の2行はオプションです。gradlecleanを呼び出すと、copyFilesタスクが実行されます。
Android {
.....
}
task copyFiles(type: Copy) {
description = 'copying some file(s)....'
from 'src/main'
into project(':Path:To:ModuleFrom:Settings.gradle').file('./res')
include 'file1.suffix'
include '**/*.html'
}
project.afterEvaluate {
preBuild.dependsOn copyFiles
}
clean.dependsOn copyFiles
clean.mustRunAfter copyFiles
私はあなたと非常によく似た問題を抱えていて、次のようにしてそれを解決することができました。
Android.buildTypes.all{ buildType ->
task "${buildType.name}CopyFiles" (type: Copy)
"${buildType.name}CopyFiles" {
description = 'Copies html5 files from the common library...'
from '../../www'
into 'assets/www'
include('**/*')
}
tasks.getByPath(":${project.name}:assemble${buildType.name.capitalize()}").dependsOn "${buildType.name}CopyFiles"
}
問題は、Android Studioがrunをクリックすると、assembleDebugのような特定のアセンブルタスクを呼び出すように見えることです。そのため、すべてのアセンブルタスクがコピータスクに依存していることを確認する必要があります。
task myCopyToAssets(type: Copy) {
def toDir = rootProject.file('app/assets')
from (rootProject.file('app/usb')) {
include 'libhotplug.so'
}
into toDir
}
tasks.whenTaskAdded { task ->
//println task.getName()
if (task.name == 'assembleDebug' || task.name == 'assembleRelease') {
println 'myCopy'
myCopyToLibs.execute()
myCopyToAssets.execute()
}
}
build.gradle
の下でこれを試してください:
tasks.whenTaskAdded { task ->
if (task.name == 'assemble') {
task.dependsOn copyFiles
}
}
私の場合、プロジェクトのクリーニングの問題のため、res/values/strings.xml
内のいくつかの「トークン」値を操作し、それを${project_root}/build/filtered-resources
にコピーします。
この操作されたリソースを正しく処理するには、Android.sourceSets.res
をコピーしたフォルダーに再定義する必要があります。
あなたのケースでは、assets
フォルダーのあるwww
フォルダーを${PROJECT_ROOT}/build/your/desired/location
にコピーし、Android.sourceSets.assets
がそれを指すように割り当てます。
プロジェクトで次のコピータスクを使用して、文字列を別のディレクトリにコピーします。
task copyStringsUniversal(type: Copy) {
from 'src/main/res/values'
include 'strings.xml'
include 'array.xml'
into 'src/universal/res/values'
}
build.dependsOn copyStringsUniversal