我有以下项目结构
MyProject
|-- build.gradle
|-- client.private
|-- server.public
|-- app
| |-- build.gradle
| |-- lint.xml
| |-- proguard-project.txt
| |-- project.properties
| `-- src
并希望将client.private
和server.public
个文件包含到最终apk的assets文件夹中,但遗憾的是无法执行此操作。
在我的app/build.gradle
...
android {
...
applicationVariants.all { variant ->
variant.mergeAssets.doLast {
copy {
from(['../client.private', '../server.public'])
into("${buildDir}/assets/${variant.dirName}")
}
}
}
}
但它只将文件复制到app/build/assets/debug
,它没有与apk一起打包。
答案 0 :(得分:5)
EDITED
请尝试使用sourceSets
。 (路径编辑)
android {
sourceSets {
main {
assets.srcDirs = ['../client.private','../server.public']
}
}
}
您可以检查每个资产目录的路径。
afterEvaluate {
android.sourceSets.main.assets.srcDirs.each{println it}
}
答案 1 :(得分:2)
更新(正确解决方案)
最后!我想我已经理解了评论意味着什么
android {
...
...
applicationVariants.all { variant ->
variant.mergeResources.doLast {
copy {
from (["../client.private", "../server.public"])
into ("$outputDir/raw")
}
}
}
}
较旧的解决方案(有效但不理想)
我无法找到在sourceSets中包含单个文件的方法,因此下一个技巧是尝试将文件复制到raw
文件夹
该解决方案基于this reddit thread
task copyKeyStores(type: Copy) {
from files(["../client.private", "../server.public"])
into 'src/main/res/raw'
}
tasks.copyKeyStores.execute()
注意:根据reddit主题中的one of the comments,有更好的方法,但我unable to figure it out。