Even's Fantasy


  • 首页

  • 标签

  • 分类

  • 归档

Hello World

发表于 2020-04-23
阅读时长 ≈

博主留言

欢迎来到本博客,写的都是解决一些不太好搜到的问题,希望能帮到各位hhhh!
对内容有疑问的或者是FF14玩家的甚至可以联系俺价格好友,联系方式都在侧边栏了!

ysdk 1.5.9及以后版本接入eclipse

发表于 2020-04-24 | 分类于 Android
阅读时长 ≈

第一个坑

最近应用宝ysdk更新到1.5.9了,没有了eclipse的接入方式,只能自己解压arr接了。但是导入ysdk的jar包后打包时会报错,报错如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
at com.android.dx.command.dexer.Main.processClass(Main.java:665)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
at com.android.dx.command.dexer.Main.access$600(Main.java:78)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:596)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:188)
at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:786)
at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:597)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:321)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:396)
at org.eclipse.core.internal.resources.Project$1.run(Project.java:618)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:597)
at org.eclipse.core.internal.resources.Project.build(Project.java:124)
at com.android.ide.eclipse.adt.internal.project.ProjectHelper.doFullIncrementalDebugBuild(ProjectHelper.java:1143)
at com.android.ide.eclipse.adt.internal.launch.LaunchConfigDelegate.launch(LaunchConfigDelegate.java:155)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:855)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:704)
at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1047)
at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1251)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
...while parsing android/os/ZygoteStartFailedEx.class

搜了一下,是说dx.jar或者jdk版本和编译jar包的版本对不上,然后需要去查看ysdk.jar包里的编译版本,位置是jar包里的META-INF->MANIFEST.MF
内容如下:

1
2
3
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.2
Created-By: 1.8.0_91-b14 (Oracle Corporation)

1.8.0_91是jdk版本。再在ysdk demo里的build.grandle里看到buildToolsVersion = “29.0.2”
我寻思我电脑上jdk只有1.8的啊,那只能是dx.jar的问题了,然后去下载了29.0.2版本的build-tools,需要放到sdk/build-tools/内,
然后在eclipse项目中的project.properties里添加

1
sdk.buildtools=29.0.2

第二个坑

处理好之前的问题后,在eclipse打包的时候又报如下错

1
2
[2020-03-25 11:00:44 - Dex Loader] Failed to load D:\adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-10\lib\dx.jar
[2020-03-25 11:00:44 - JiangHu] Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!

后来发现其实这个错只会在eclipse上打包会报,用ant直接打包是没问题的。
但是毕竟还是要在eclipse上调试,找了很久最后终于在stackflow上找到了解决方案,把以前用的build-tools版本内的dx.jar下的com.android.dx.command.DxConsole.class 复制到新版本的dx.jar包下即可(可以用winrar同时打开新旧版本的dx.jar,然后把DxConsole用鼠标拖过去)。

新版本的 YSDk 还使用到了 androix 的一些 supprt 依赖: androidx.core.content.FileProvider 和 androidx.localbroadcastmanager.content.LocalBroadcastManager。需要引入androidx的jar包,可以去github这位大哥那边下载,大哥github链接:https://github.com/dandar3,需要引入androidx.core.jar和 androidx.localbroadcastmanager.jar

这位大哥还有很多google sdk需要用到的库,需要接入google sdk的可以去他那找,希望能帮到其他人

Android 各大应用市场跳转指定游戏界面

发表于 2020-04-24 | 分类于 Android
阅读时长 ≈

通常跳转方式

一般各大手机厂商应用商店,应用宝,九游,豌豆荚之类的app都是按下面这种方式跳转的

1
2
3
4
5
//appPkg是游戏包名 ,marketPkg是应用商店包名
Uri uri = Uri.parse("market://details?id=" + appPkg);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setPackage(marketPkg);
startActivity(intent);

其他渠道

taptap

1
2
3
4
String url = "taptap://taptap.com/app?app_id=xxxxx&source=outer|update";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

4399游戏盒

1
2
3
4
5
//gameId可以去4399游戏盒里搜你的游戏然后分享链接,链接里的数字就是gameId,package填游戏包名
String url = "m4399://gameDetail?gameId=xxxxxx&package=xxxxxxx";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

bilibili

1
2
3
4
5
//id通过去bilibili游戏界面分享链接获得
String url = "bilibili://game_center/detail?id=xxxxx"
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

关于应用宝YSDK授权成功接收不到成功回调,但能接受到失败回调

发表于 2020-04-23 | 分类于 Android , sdk
阅读时长 ≈

log信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
********************** INTENT START **************************
Action: null
Component: null
Flags: 0
Scheme: null
key_error_code:0
key_error_msg
key_error_detail
key_action:action_login
key_response:{"ret":0,"openid":"BCD9247B467E78230550F7A3DC69A731","access_token":"A2925E540CEEFB534FAE54F06579C4FF","pay_token":"F6C9219B4297260D5A01ED880C928C8F","expires_in":7776000,"pf":"desktop_m_qq-10000144-android-2002-","pfkey":"12cbec2aa0531ab2daccf77ec42dfd33","msg":"","login_cost":84,"query_authority_cost":641,"authority_cost":0}
********************** INTENT END **************************
03-26 20:45:46.070 15664-15664/com.tencent.tmgp.hmsk.sansheng D/YSDK_USER_QQ: onActivityResult requestCode:11101
onActivityResult resultCode:-1
03-26 20:45:46.070 15664-15664/com.tencent.tmgp.hmsk.sansheng I/openSDK_LOG.Tencent: onActivityResultData() reqcode = 11101, resultcode = -1, data = null ? false, listener = null ? false

如何解决

如果生命周期都配置完好,appid填写正确,能调到onActivityResult,但是依然无法收到成功回调

应用宝官方回答

为保持游戏内场景在各个终端版本具备良好兼容性和一致体验,本次接入X5内核(TBS),需要对so库做调整(仅接YSDK的应用宝渠道包需要)
原因:https://x5.tencent.com/tbs/technical.html#/detail/sdk/1/34cf1488-7dc2-41ca-a77f-0014112bcab7
处理方式:打包时只保留armeabi文件夹以及对应运行库so文件,删掉其它的所有jni支持库的文件夹如(arm64 X86 X86_64 mips等)
如只有armeab_v7a则把YSDK JniLib 中armeabi目录下对应so库copy到armeab_v7a文件夹内。

解决方法

但是我发现加入ndk{abiFilter “armeabi”}build不过,那就只能用armeabi-v7a了,做法如下:在build.gradle中的android{defaultConfig中}添加

1
ndk{abiFilters "armeabi-v7a"}

在sourceSets.main{}中添加(也可以是别的,根据项目配置而定)

1
jniLibs.srcDir "libs"
1
2
3
4
5
6
7
8
9
10
11
android {
compileSdkVersion 22
buildToolsVersion '28.0.3'

defaultConfig {
applicationId "com.tencent.tmgp.hmsk.sansheng"
minSdkVersion 14
targetSdkVersion PROP_TARGET_SDK_VERSION
versionCode 1
versionName "1.0.8"
ndk{abiFilters "armeabi-v7a"}

并且在libs下创建armeabi-v7a文件夹(如果没有的话),并将YSDK_Android_x.x.x_xxxx.aar里的armeabi文件夹下的.so文件拷贝放进去,然后项目rebuild就行啦~折腾了我挺久,为后人提醒

​

Even

Even

4 日志
2 分类
3 标签
GitHub 微博 QQ E-mail
© 2020 Even
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4