cocos2d-x 3.17 编译cpp-empty-test的release版本失败

新手求教:

cpp-empty-test整个项目都使用默认设置来进行编译,debug成功,release死活都过不去。另外,构建静态库也同样是这个问题,debug版本的静态库没有问题,release也失败,均是同一错误。

Task :libcocos2dx:verifyReleaseResources FAILED
Putting task artifact state for task ‘:libcocos2dx:verifyReleaseResources’ into context took 0.0 secs.
Up-to-date check for task ‘:libcocos2dx:verifyReleaseResources’ took 0.004 secs.
It is not up-to-date because:
Task has failed previously.
All input files are considered out-of-date for incremental task ‘:libcocos2dx:verifyReleaseResources’.
Unable do incremental execution: full task run Aapt2QueuedResourceProcessor is using D:\Android\Sdk\build-tools\27.0.3\aapt2.exe

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ‘:libcocos2dx:verifyReleaseResources’.

com.android.ide.common.process.ProcessException: Failed to execute aapt

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --debug option to
    get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

系统是win7 x64,其它各项版本为jdk 8u172,android studio 3.1.2,ndk r17,gradle 4.4,compileSdkVersion=27,minSdkVersion=14,targetSdkVersion=27,buildToolsVersion=27.0.3,gradle plugin 3.1.2

之前各版本均使用推荐设置,jdk r16 / as 3.1 / gradle plugin 3.0.0 / gradle 4.1等,debug无问题,release无法成功。

构建静态库使用命令行:cocos gen-libs -c -p android -m release,官网提示-m缺省默认为release,我这里测试为debug,添加版本后,执行出错,错误与上面提示信息一致。

上面错误信息提示之前版本失败,这里我是直接下载官网3.17版本的zip包后解压,然后配置好环境变量后,就直接进入cocos2d-x目录编译cpp-empty-test的android版本时失败。

看一下你的环境变量,全局和个人有没有重复,把全局的环境变量放在个人的环境变量中再重新编译一次,记得把全局变量删除掉。还有,编译的时候需要打开新包。或者手动清理一下编译产生的东西

感谢您的答复,环境变量没有重复的,个人部分只有cocos2d-x的,其它都是全局,每次编译之前,我都清理了编译后的文件,关键是debug能成功,而release怎么都成功不了,在android studio中也是一样的问题,android studio中debug也能成功。

默认 Release 的提示是错的,3.17 已经改过了,说明你 cocos console 的环境变量有问题

再次感谢,官网提示我是指的官网的文档里的,没修改过来,我这里的帮助提示默认是debug。

使用这种方式,debug是没有任何问题的,直接构建出静态库了,release不行,3.17版本的所有test项目,release版本均无法成功打包apk,debug没问题,debug打包的apk在真机测试也没有问题。

打 release 包,是需要签名信息的,你通过 android Studio 能否正常打包

as的release打包功能是正常的,新建as HelloWorld工程,设置好签名,release打包apk并测试通过,没有问题。

通过 cocos 命令行,打包 Release 的时候有输入签名信息吗?能否提供全部的 cocos 命令行执行输出信息,可以传个文件。

cocos 命令行,最终是调用 Gradle 命令打包的

这里并不是执行release打包操作,是执行的release静态库,并不需要输入签名信息啊,签名信息是可以直接在proj.android/gradle.properties中进行设置的,这部分没问题。

在构建release版本的静态库就出错了,还不用到最后的compile部分。

构建release版本静态库使用命令行如下:

cocos gen-libs -c -p android -m release --app-abi armeabi-v7a:arm64-v8a:x86

去掉abi部分也无法构建成功,只有debug版本能构建成功,compile也只能编译debug版本。

补发一张debug构建静态库成功的图,命令行完成。如果命令行添加-m release则会失败。太无语了。

构建成功后的3个目录

以及其中一个armeabi-v7a的库文件

为何偏偏release构建不了呢???

正常的日志输出是这样的

正在执行:'F:\cocos2d-x\tools/cocos2d-console/bin\cocos.bat compile -s F:\cocos2d-x\tests/cpp-empty-test -p android --no-sign --mode release --app-abi armeabi-v7a'

编译模式:release
使用 Android Studio 工程:F:\cocos2d-x\tests\cpp-empty-test\proj.android
正在生成 apk 文件...
正在执行:'"F:\cocos2d-x\tests\cpp-empty-test\proj.android\gradlew.bat" --parallel --info assembleRelease -PPROP_BUILD_TYPE=ndk-build -PPROP_APP_ABI=armeabi-v7a'

......

Starting process 'command 'C:\Users\cocos\AppData\Local\Android\Sdk\ndk-bundle\ndk-build.cmd''. Working directory: F:\cocos2d-x\tests\cpp-empty-test\proj.android\app Command: C:\Users\cocos\AppData\Local\Android\Sdk\ndk-bundle\ndk-build.cmd NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=F:\cocos2d-x\tests\cpp-empty-test\proj.android\app\jni\Android.mk NDK_APPLICATION_MK=F:\cocos2d-x\tests\cpp-empty-test\proj.android\app\jni\Application.mk APP_ABI=armeabi-v7a NDK_ALL_ABIS=armeabi-v7a NDK_DEBUG=0 APP_PLATFORM=android-14 NDK_OUT=F:/cocos2d-x/tests/cpp-empty-test/proj.android/app/build/intermediates/ndkBuild/release/obj NDK_LIBS_OUT=F:\cocos2d-x\tests\cpp-empty-test\proj.android\app\build\intermediates\ndkBuild\release\lib NDK_TOOLCHAIN_VERSION=clang -j8 NDK_DEBUG=0 F:/cocos2d-x/tests/cpp-empty-test/proj.android/app/build/intermediates/ndkBuild/release/obj/local/armeabi-v7a/libcpp_empty_test.so
Successfully started process 'command 'C:\Users\cocos\AppData\Local\Android\Sdk\ndk-bundle\ndk-build.cmd''
[armeabi-v7a] Compile++ arm  : cocostudio_static <= WidgetReader.cpp

附全部日志:
gen-libs-release.zip (373.1 KB)

你可以把 cpp-empty-test 构建生成的中间文件,全部删除,重新编译试一下,失败的话,上传日志。

你准备怎么用这些预编译库?debug 模式的库怎么用

感谢不停的解答并测试错误。

建立静态库的目的仅仅是为了减少重编译所浪费的时间,debug版本的静态库已可正常使用,但还是希望能使用release版本来发行apk。

删除了所有中间文件,重新构建release版本,还是出错,下面是错误日志。

error.rar (7.4 KB)

1赞
AAPT2 processed(246165431) linking job:QueuedJob{
title=Linking, 
task={config=AaptPackageConfig(manifestFile=D:\Cocos\cocos2d-x-3.17\cocos\platform\android\libcocos2dx\build\intermediates\manifests\aapt\release\AndroidManifest.xml, options=AaptOptions(noCompress=null, failOnMissingConfigEntry=false, additionalParameters=null), androidJarPath=D:\Android\Sdk\platforms\android-27\android.jar, variantType=LIBRARY, sourceOutputDir=null, resourceOutputApk=null, librarySymbolTableFiles=[], symbolOutputDir=null, verbose=false, resourceDirs=[D:\Cocos\cocos2d-x-3.17\cocos\platform\android\libcocos2dx\build\intermediates\res\compiled\release], proguardOutputFile=null, mainDexListProguardOutputFile=null, splits=null, debuggable=false, customPackageForR=null, pseudoLocalize=false, preferredDensity=null, resourceConfigs=[], generateProtos=false, imports=[], packageId=null, dependentFeatures=[], listResourceFiles=false, staticLibrary=false, staticLibraryDependencies=[], intermediateDir=null)}, 
future=com.google.common.util.concurrent.SettableFuture@6bc012}
Started 541044681
Slave 346817781 is ready
Started 1779238501
AAPT1 err(Facade for 246165431): C:\Users\Admin\AppData\Local\Temp\aapt-2937345224476275263-out: error: Error 317 while retrieving message for error 42. -> QueuedJob{
title=Linking, 

能看到是调整配置的时候出的问题,具体原因暂时不清楚。不过既然你可以通过 AS, Release 打包成功,你可以把这个编译过程中的库,从临时目录 copy 出来,就可以拿来当 Release 的静态库用(因为 cocos 命令行,就是这么做的)

可以分享一下你是怎么使用 debug 版本的静态库,来减少编译时间的吗? 手写 Android.mk 调用静态库,还是其它的什么方法

构建release版本没有开始产生任何静态库就已经失败了,我看了你的日志,在verifyReleaseResources之后,进入到编译源文件过程,然后生成.a的库,我这里是没到这一步。

至于使用静态库,就是自己写Android.mk,导入引用文件的目录,导入静态库目录。自己定义库模块名,然后用PREBUILT_STATIC_LIBRARY,参考下面这篇文章。

https://www.freeyun.com/cocos2d-x-whole-static-libraries.html

官网文档也有一点介绍,不详细,只有编译过程,没有各个平台的使用实例。

1赞

666,能否把你自己写的适合 3.17 版本的 Android.mk 分享一下,最好配一下修改后的 gradle 配置文件。英文论坛有一些开发者想知道怎么用,但是不会:sweat_smile:

打包过程完成,静态库也生成了,在这样的路径 \proj.android\app\.externalNativeBuild\ndkBuild\release

不是,我用AS创建的Hello World工程是基于JAVA的,并不是cocos2d-x,目的只是为了测试AS是否能正常工作而已,包括签名这些设置是否正常等等。

至于debug的静态库使用,我也不确定是否通用,跟ndk的一些配置都有关联,不光是一个Android.mk就能解决问题,我解决好release问题之后一起发上来吧。

先上传一个之前测试debug静态库成功了的Android.mk文件,是整个静态库的基础,也就是存放到静态库的平台根目录下,由ndk-build在项目Android.mk中引用执行,但后面由于我一直在修改release的问题,导致这个文件使用有问题,我暂时没做处理,只建了一个备份。

Android.rar (2.8 KB)

我将所有库都加入到了其中,包括box2d这些官方发布的版本已编译好了的.a,我都转移到了一起,存放在同一平台的不同架构下。

误解了,我以为是 cocos new-l cpp 创建出来的 hello world 工程。

官方在 3.17 发布之前,验证过 Release 模式可以的。由于 Android 的内部配置比较复杂,如果暂时找不到好的方法,建议重新解压 cocos2d-x-3.17.zip ,重设环境变量,直接用 Android Studio 导入工程试一下。

我已经删除重新解压并设置环境变量十多遍了,各种操作均做过了,包括直接使用AS导入并编译release版本。

debug均能正常通过并打包成功,且通过真机测试,无错。

就是卡在release版本下面了,不论是ndk-build,cmake,还是AS,整个3.17版本的test项目,均release失败,包括各种ndk,sdk,gradle版本的测试,错误信息都是卡在libcocos2dx:verifyReleaseResources这个地方,aapt执行失败,非常纠结。

实际上3.16版本确实没有这个问题,之前我在3.16版本下开发过一段时间,不过3.16在使用静态库时也有很多麻烦,而3.17却不存在,比较容易构建静态库,但又在release版本下失败,现在我打算转回3.16,先做好项目再说了,发布到这里,只是想知道大家使用3.17版本是否出现和我一样的问题,是官方这个版本在release下有问题,还是我自己的配置的问题。

再次感谢leda以及QQLinux572646,结帖了,不再讨论这个问题。

楼主,离成功就一步之遥,何弃。把下面的配置加到 gradle.properties 中

android.enableAapt2=false

参考帖子:

https://discuss.cocos2d-x.org/t/build-error-using-android-studio-execution-failed-for-task-libcocos2dx-verifyreleaseresources/40721

看原帖的反馈,设置后解决了 libcocos2dx:verifyReleaseResources 问题