3.17.2版本新建工程打包成功发现没有assets是需要在哪里修改配置么?
android.applicationVariants.all { variant ->
delete "${buildDir}/intermediates/merged_assets/${variant.name}/${variant.mergeAssetsProvider.name}/out/src"
delete "${buildDir}/intermediates/assets/${variant.name}/src"
variant.assembleProvider.getOrNull().doLast{
delete "${buildDir}/intermediates/merged_assets/${variant.name}/${variant.mergeAssetsProvider.name}/out/src"
delete "${buildDir}/intermediates/assets/${variant.name}/src"
delete "${buildDir}/../src/main/assets/src"
}
variant.mergeAssetsProvider.getOrNull().doFirst{
delete "${buildDir}/../src/main/assets/src"
if (USE_COMPILE_LUA == 'false'){
copy {
from "${buildDir}/../../../../../src"
into "${buildDir}/../src/main/assets/src"
}
}else{
copy {
from "${buildDir}/../../../../../${COMPILE_LUA_PATH}"
into "${buildDir}/../src/main/assets/src"
}
}
}
老哥你这个哪个版本的gradle和as?我这边试了下好像还是不行,as 3.30 3.20 和gralde 4.6 4.10.1这几个版本都试过了不行
打的包不管是relese还是debug都是黑屏的,解压看了下都都没有assets
我猜有可能是新版gradle不兼容cocos官方(设定的gradle),建议使用Android Studio标准目录,删除cocos设定的sourceSet 即src/main/java这种标准默认目录结构
然后手动复制资源和代码到assets目录结构中
建议这种问题了解一下gradle和Android Gradle plugin dsl
把官方的这个sourceset删掉,使用默认标准sourceset试试,src/main/java src/main/cpp src/main/assets
亲测Android Gradle Plugin Version用3.1.0没问题,资源会打进包里,但AS会建议你升级到3.4.1,手贱升级后就GG了,需要自己新建app/assets,资源拷贝进去,然后assets.srcDir "assets"告诉AS资源目录在这里
我看了下是资源没有被拷贝进去的问题,现在改了下,就可以了
android.applicationVariants.all { variant ->
// delete previous files first
delete “{buildDir}/intermediates/assets/{variant.dirName}”
delete “{buildDir}/intermediates/merged_assets/{variant.dirName}”
variant.mergeAssets.doLast {
copy {
from "${buildDir}/../../../../../res"
into "${buildDir}/intermediates/assets/${variant.dirName}/res"
}
copy {
from "${buildDir}/../../../../../src"
into "${buildDir}/intermediates/assets/${variant.dirName}/src"
}
if (variant.name.compareTo('release') == 0) {
copy {
from "${buildDir}/../../../../../res"
into "${buildDir}/intermediates/merged_assets/release/mergeReleaseAssets/out/res"
}
copy {
from "${buildDir}/../../../../../src"
into "${buildDir}/intermediates/merged_assets/release/mergeReleaseAssets/out/src"
}
}else{
copy {
from "${buildDir}/../../../../../res"
into "${buildDir}/intermediates/merged_assets/debug/mergeDebugAssets/out/res"
}
copy {
from "${buildDir}/../../../../../src"
into "${buildDir}/intermediates/merged_assets/debug/mergeDebugAssets/out/src"
}
}
// copy {
// from "${buildDir}/../../../../cocos2d-x/cocos/scripting/lua-bindings/script"
// into "${buildDir}/intermediates/assets/${variant.dirName}/src/cocos"
// }
// compile & encrypt the scripts if necessary
def compileScript = (variant.name.compareTo('release') == 0)
if (project.hasProperty('PROP_COMPILE_SCRIPT')) {
compileScript = (PROP_COMPILE_SCRIPT.compareTo('1') == 0)
}
def encryptLua = project.hasProperty('PROP_LUA_ENCRYPT') && (PROP_LUA_ENCRYPT.compareTo('1') == 0)
if (compileScript || encryptLua) {
// -1 means not build bytecode
// 0 means build 32bit only
// 1 means build 64bit only
// 2 means build both 32bit & 64bit
def buildType = -1
def mergeAssets = "mergeDebugAssets"
def dirName = "debug"
if (compileScript) {
def need64 = false
def need32 = false
def abis = PROP_APP_ABI.split(':').collect{it as String}
abis.each{ abi->
if (abi.compareTo('arm64-v8a') == 0) {
need64 = true
}
else
{
need32 = true
}
}
if (need64 && need32) {
buildType = 2
}
else if (need64) {
buildType = 1
}
else {
buildType = 0
}
mergeAssets = "mergeReleaseAssets"
dirName = "release"
}
// invoke cocos command to compile & encrypt the lua files
switch (buildType) {
case -1:
compileLua("${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src",
"${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src",
false, false, encryptLua)
break
case 0:
compileLua("${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src",
"${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src",
true, false, encryptLua)
break
case 1:
compileLua("${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src",
"${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src/64bit",
true, true, encryptLua)
// remove the lua files in src dir
delete fileTree("${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src") {
include '**/*.lua'
}
delete "${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src/cocos"
break
case 2:
compileLua("${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src",
"${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src/64bit",
true, true, encryptLua)
compileLua("${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src",
"${buildDir}/intermediates/merged_assets/${dirName}/${mergeAssets}/out/src",
true, false, encryptLua)
break
}
}
}
}
果然是没有自动拷贝进去的问题,手动改了下资源的就可以了
很有用,帮了大忙。因为compileSdkVersion要升29,gradle tool就要升 classpath ‘com.android.tools.build:gradle:3.2.0’,就会出现拷贝失败的问题。
升级到 gradle:3.2.0 后 拷贝路径药这么写:
into “{buildDir}/intermediates/merged_assets/{variant.dirName}/merge${variant.dirName}Assets/out”