Cocos Creator 默认打出的安卓原生包 gradle 版本是4.10.3
,gradle插件版本是3.2.0
,官网文档写了不要升级版本,但是很多第三方sdk 推荐的gradle 版本都比这个高,现在已经升级到2.4.3官方一直也没有升级,那么只能自己升级,当然了,正如官网文档说的,升级报错,接下来就说说如何修改,才能正确的解决这个问题。
开发环境
- Cocos Creator 2.4.3
- Android Studio 4.1
- Mac环境
gradle 版本
原来版本 :4.10.3
(插件3.2.0
)
升级后版本: 5.6.4
(插件3.6.3
)
gradle路径:jsb-default/frameworks/runtime-src/proj.android-studio/gradle/wrapper/gradle-wrapper.properties
插件路径:jsb-default/frameworks/runtime-src/proj.android-studio/build.gradle
1 | #Fri Oct 27 10:18:28 CST 2017 |
插件路径:jsb-default/frameworks/runtime-src/proj.android-studio/build.gradle
1 | dependencies { |
修改后 可以通过 File–>Project Structure 查看
修改文件
setting.gradle 修改
原因:构建失败
路径:
1 | jsb-default/frameworks/runtime-src/proj.android-studio/setting.gradle |
修改前 :
1 | include ':libcocos2dx',':game', ':instantapp' |
修改后:
1 | include ':libcocos2dx' |
修改原因:不需要game,用不到 这个模块是给Google Instant使用的,也可以直接屏蔽对应模块
CocosAndroid.mk 修改
原因:构建失败
路径:
1 | jsb-default/frameworks/runtime-src/proj.android-studio/jni/CocosAndroid.mk |
修改前 :
1 | LOCAL_MODULE := cocos2djs_shared |
修改后:
1 | LOCAL_MODULE := cocos2djs |
修改原因:构架报错,找不到target “cocos2djs”
app/build.gradle(资源复制丢失)
原因:构建失败
路径:
1 | jsb-default/frameworks/runtime-src/proj.android-studio/app/build.gradle |
修改前 :
1 | android.applicationVariants.all { variant -> |
修改后:(这个方案经原作者提醒 应该改成下面的最新方案)
1 | android.applicationVariants.all { variant -> |
修改原因:基本上就是把 into “${outputDir}/x” 改成 into outputDir.dir(“x”)
2021-08-30 日更新
修改后:原参考文章作者 指出了最后的修改方案 这边做个搬运 大家可以按照这个方式 尝试一下
1 | copy { |
作者:居安up
链接:https://www.jianshu.com/p/866f2798b98c
测试效果
App构建设置
App预览效果
按钮点击输出日志
PS 如果 gradle 下载失败 可以参考我的另外一篇博客:CocosCreator导出Android项目采坑指南
相关链接: gradle 官方release版本
错误解决
如果上面一切顺利,则下面错误可以无视跳过,下面的是我本地环境遇到的问题 可能和软件版本有关系。
警告API ‘variant.getMergeAssets()’ is obsolete and has been replaced with ‘variant.getMergeAssetsProvider()’.
解决方法:variant.mergeAssets.doLast
替换为 variant.mergeAssetsProvider.get().doLast
错误:Error: Invoke-customs are only supported starting with Android O (–min-api 26)
将代码添加到app的build.gradle的android节点下
1 | compileOptions { |
升级完 打release包出现的错误
1 | Error:Execution failed for task ':app:lintVitalRelease'. > Invalid main APK outputs : BuildOutput{apkInfo={type=MAIN, versionCode=0, filters=[]}, path=/Users/junan/Desktop/svnall/android/youcai_android/app/release/.DS_Store, properties=} |
解决方法1:
参考 Android studio 4.0 update is giving lint infrastructure error, when used with gradle 6.1.1
Android Studio Build APK没有报错,但是Generate signed apk报错
在app
的build.gradle
文件中添加
1 | android { |
解决方法2:
参考 Caused by: java.lang.reflect.InvocationTargetException
解决方法:删除release目录下所有文件(这个其实是打出包的地方,因为我用了自定义修改名字,以前是支持多个包同时存在)
这样重新打包,正常出包。网上有人说打release包前,先打个debug包就好了,这个我没有测试,大家自己可以试试看。
里面并没有报是哪行代码或者哪些配置出错,搞得一脸懵。
搜索了下,基本上都是提示
Java反射异常
,What???之前打包都没问题,而且近期没有新增 Java 反射代码。真是无从入手。
后面仔细看了异常日志,发现还报了这个异常:
1
2
3
4
5
6
7
8
9
10 Caused by: java.lang.RuntimeException: Invalid main APK outputs :
EarlySyncBuildOutput(type=com.android.build.gradle.internal.scope.InternalArtifactType$APK@1c0767aa,
apkType=MAIN, filtersData=[], version=0,
output=/Users/bujinshidemao/Desktop/release/.DS_Store),
EarlySyncBuildOutput(type=com.android.build.gradle.internal.scope.InternalArtifactType$APK@1c0767aa,
apkType=MAIN, filtersData=[], version=0,
output=/Users/bujinshidemao/Desktop/release/灵感.apk),
EarlySyncBuildOutput(type=com.android.build.gradle.internal.scope.InternalArtifactType$APK@1c0767aa,
apkType=MAIN, filtersData=[], version=0,
output=/Users/bujinshidemao/Desktop/release/灵感_正式_26.apk)初步看了下,是输出 Apk 的时候报的异常,并且关联到了之前的打包版本,于是,我采取了以下操作:
- 删除输出路径
- 重新打包
打包成功!
参考
- Cocos Creator 原生项目升级gradle版本 - 简书
- Android Studio 升级3.4,Gradle升级5.1遇到的问题
- Android Gradle 插件版本说明-官网
- 原生安卓gradle plugin版本问题-cocos论坛
- cocos creator 编译android失败-cocos论坛
- Error: Invoke-customs are only supported starting with Android O (–min-api 26)- CSDN
- Execution failed for task ‘:app:lintVitalRelease’. Invalid main APK outputs- CSDN
- Android studio error : API ‘variant.getMergeAssets()’ is obsolete-cocos论坛
- Caused by: java.lang.reflect.InvocationTargetException