cocoscreator 原生接入 oppo sdk
升级 gradle 至 3.3.3 报错
API ‘variant.getMergeAssets()’ is obsolete and has been replaced with ‘variant.getMergeAssetsProvider()’.
代码报错
cls.getDeclaredField(“mHiddenApiWarningShown”)
Reflective access to mHiddenApiWarningShown will throw an exception when targeting API 29 and above
对 mHiddenApiWarningShown 的反射访问将在面向 API 29 及更高版本时抛出异常
查询资料得知,这边的代码是为了屏蔽谷歌对于使用了私有方法而弹出的弹窗而添加的
Android P(Android 9)出现Detected problems with API compatibility问题解决
没有找到方法可以解决,暂时屏蔽这块代码
尝试导入 demo 中做的 layout
报错,无法找到 R
后续需要补下基础,android 的项目结构
打包报错
Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared
AndroidStudio中提示:uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in libr
将 build.gradle 中 defaultConfig.minSdkVersion 改为一致,然后 sync。
manifest 中 style 报错
将 demo 中的 style 拖过去即可
Caused by: com.android.tools.r8.utils.AbortException: Error: null, Cannot fit requested classes in a single dex file
按照 oppo 文档上进行修改
若出现方法数超过64K问题,请使用multiDex的方案,同时需要配置以下类再主dex中,配置方法如下:
android {
defaultConfig {
...
multiDexEnabled true
multiDexKeepProguard file('maindexlist.pro')
}
}
maindexlist.pro内容如下:
-keep class * extends android.app.Application
-keep class * extends android.content.ContentProvider
-keep class com.bytedance.sdk.openadsdk.core.**{*;}
-keep class com.bytedance.sdk.openadsdk.multipro.**{*;}
都改完后运行报错
检查发现是因为指定了两个首屏 activity。
如果接开屏广告的话,需要把广告所在的 activity 设置为首屏。
改完运行闪退
FATAL EXCEPTION: pool-2-thread-1
干掉 initSdk 后运行正常,说明还是 initSdk 的问题
重新检查,发现有一个导入的 arr 包和 demo 的不一致
替换,运行通过
还原成完整 app 类,打包运行
运行通过
替换为横屏开屏广告
成功,出现广告
激励视频广告拉取成功
激励视频广告和开屏广告一样,切换回主 activity 不正常。
激励广告视频没有触发回调。
初始 activity 从 开屏 activity 改为 游戏 activity,并在游戏 activity 中切换至 开屏 activity,问题消失。
激励视频返回后,游戏黑屏
看日志,发现是返回后游戏 activity 重启了,然后调用回调时,回调方法不存在,于是进程挂掉。
以为是游戏切出后,自动重启场景导致的问题,后来想到,出现问题的场景是大厅,大厅并没有切出后刷新的机制。
所以怀疑可能是视频播放完后,把挂载的 activity 重启了?
专门为激励视频添加了一个 activity。
报错消失,正常获得了奖励。
激励视频中途关闭白屏
在中途关闭的回调及播放错误的回调中中,都加入自动跳转回游戏 activity 的代码
激励视频的落地页与之前的开屏页一样,在后台没有自动关闭
接入登录支付 sdk
按照文档上进行操作
编译报错
Manifest merger failed : Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from [core-1.1.0.aar] AndroidManifest.xml:24:18-86
is also present at [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory).
Suggestion: add ‘tools:replace=”android:appComponentFactory”‘ to
android 和 androidx 冲突
将广告 sdk 修改至 androidx 版本
视频结束后,返回游戏黑屏
同之前的问题一样,游戏被重启了
发现是和时间有关,时间长的视频结束后就会重启游戏
切换成不创建 activity 的模式,又好了。。
之前是不创建就GG,现在是创建就GG。。
在后台有多个页面的问题
Android同一个应用app最近任务有多个Activity窗口
表现:点安卓后台应用列表,会出现同一个 app 的几个 activity 同时出现在列表中。
出现这样的原因是因为两个Activity不属于同一个Task。
区分标志是清单文件里的taskAffinity这个属性:
-
taskAffinity 表示当前 activity 具有亲和力的一个任务(翻译不是很准确,原句为 The task that the activity has an affinity for.),大致可以这样理解,这个 taskAffinity 表示一个任务,这个任务就是当前 activity 所在的任务。
-
在概念上,具有相同的 affinity 的 activity(即设置了相同 taskAffinity 属性的 activity)属于同一个任务。
-
一个任务的 affinity 决定于这个任务的根 activity(root activity)的 taskAffinity。
-
这个属性决定两件事:当 activity 被 re-parent 时,它可以被 re-parent 哪个任务中;当 activity 以 FLAG_ACTIVITY_NEW_TASK 标志启动时,它会被启动到哪个任务中。(这个比较 难以理解,请结合中的属性 allowTaskReparenting 和 Intent 中的标志 FLAG_ACTIVITY_NEW_TASK 加以理解)
-
默认情况下,一个应用中的所有 activity 具有相同的 taskAffinity,即应用程序的包名。我们可以通过设置不同的 taskAffinity 属性给应用中的 activity 分组,也可以把不同的应用中的 activity 的 taskAffinity 设置成相同的值。
-
为一个 activity 的 taskAffinity 设置一个空字符串,表明这个 activity 不属于任何 task。
所以
-
如果想保持多个窗口, 就保证多个 Activity 的 taskAffinity 值不同.
-
如果想保持单个窗口, 就保证保证多个 Activity 的 taskAffinity 值一致.
debug 编译运行正常
release 编译报错
怀疑是混淆出的问题,但混淆配置是按照文档上的来的。
报错:transformClassesAndResourcesWithProguardForRelease
transformClassesAndResourcesWithProguardForRelease
proguard-rules.pro 增加配置 -ignorewarnings
编译通过,运行正常
生成和使用秘钥库
修改名字和图标
修改应用名图标
添加用户协议
用户协议是个长文本,cocos 打开弹窗的时候直接就卡住了,换成图片就好了。。
添加安卓返回键二次确认
没有效果,并未走进回调之中。
发现每次点返回时,会打印 unknown keycode 6
尝试通过监听事件来处理
成功
修改好之后,打包不应用修改,还是之前的版本(有的变了,有的没变。。。)
删除 temp library,重启编辑器,打包重新生成,删除app重新安装,然后好了,不知道是哪一步好的。
确定是热更的问题,优先用的热更的文件。
发现 android studio 调试控制台中没有显示任何我在项目中添加的打印,但sdk的打印都还在。。
不应该在 run 中查看日志,应该在 logcat 中查看。。 run 中确实不显示。。
1.需要接 sdk 的退出引导
2.OPPO K3 没有出现退出引导
sdk 接入引导成功接入
oppo k3 尝试使用 onBackPressed 看是否能捕获事件
修改版本号
在 build.gradle 中修改
google为APK定义了两个关于版本属性 VersionCode 和 VersionName ,他们有不同的 用途 简单来说, VersionCode 对消费者不可见,仅用于应用市场、程序内部识别版本,判断新旧等 用途 ,在应用市场上第一次上传 VersionCode =1,第二次就得为 VersionCode =2,否则会上传失败 VersionName 是展示给用户的,用户可以通过他认知自己安装的版本,软件升级一般. versionCode 和 versionName 区别.
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/273249.html