- 博客(40)
- 收藏
- 关注
原创 小游戏聚合SDK的工具类封装
之前的文章写了如何开发小游戏聚合SDK,既然是聚合SDK,工具类的封装也比较重要,做好基础搭建后续在接入其他渠道的时候能大大减少工作量。
2024-11-28 17:27:36
685
原创 微信小游戏/抖音小游戏SDK接入踩坑记录
上两篇文章写了如何搭建一个小游戏聚合SDK以及如何打包前端SDK,这篇文章会记录我在接入微小和抖小时遇到的问题及解决办法。
2024-11-28 16:01:57
1572
原创 如何将多个JS文件打包成一个JS文件?
上一篇已经记录了如何开发一个小游戏聚合SDK,既然是SDK,最终都是给外部人员使用的。调研了一下市面上的前端SDK,最终都是编译成一个 js 文件。我猜理由大概是 js 文件之间的调用都是需要网络加载的,所有内容都在一个文件里避免出现加载慢等问题。
2024-11-28 12:24:05
1716
原创 小游戏聚合SDK开发
需求是小游戏需要上架国内微信/抖音小游戏(以下简称微小、抖小)平台,为了方便后续扩展,开发一个聚合的小游戏SDK是比较合理的,这样CP在上架小游戏平台时只接入这一套聚合SDK接口就可以适配不同的小游戏平台,不用关心具体小游戏平台功能。
2024-11-28 11:54:40
1278
原创 Android 反编译-回编译
反编译 APK 后,可以修改源代码,添加第三方库等,然后使用相应的工具将修改后的源代码重新打包成 APK。需要注意的是,由于 APK 的签名校验机制,如果对 APK 进行了修改,则需要重新签名才能安装和使用。反编译 APK 是将一个已经编译过的 APK 文件通过工具反编译为可读的源代码文件,这样就能够修改代码,实现对 APK 的二次开发。反编译 apk ,获取 apk 的 res 资源,下在 apktool 工具,打开命令行,,由于 Google Play 封杀了插件化技术,推出了他自己的“官方插件化”
2023-03-27 15:48:10
842
原创 Android 解决第三方库版本冲突
在开发游戏SDK时会使用一些第三方库,例如上文提到的 OkHttp ,或者集成某些第三方,而这些第三方使用的系统库(例如 supportv7)和项目组使用的版本不一致,在编译时就会出现版本冲突问题。尽量不使用第三库,例如针对 OkHttp ,如果没有特殊的需求(比如需要中断某个请求),可以不使用 OkHttp ,自行开发一个基于系统 API 的网络框架。解决版本冲突。以下提供一些解决版本冲突的方法。
2023-03-17 18:35:12
3171
1
原创 游戏SDK架构设计之代码实现——网络框架
前篇介绍了游戏SDK的基本架构设计,其中一个模块是基础工具库,基础工具库的内容包括:统一封装的网络框架,可以使用okhttp、volley、retrofit,或自行写的异步任务也可以。还有存储工具类、文件工具类、热修复工具类等。这个篇幅先介绍一下网络框架。由于游戏SDK是提供给CP使用的,为避免不必要的第三方库冲突,也同时减少包体,游戏SDK的应尽量减少引入第三方库。自行封装的网络框架无法满足需求某个任务的需求,比如有业务场景,当用户取消登录时,需要立即取消登录请求,不再继续登录。
2023-03-16 19:11:46
925
原创 OKHttp 源码解析(一)
目前大多数的网络框架都是使用 OKHttp ,Retrofit 也是基于 OKHttp,OKHttp 使用简单,但出现的问题不少,也借此机会了解一下 OKHttp 的源码。本文的 OKHttp 源码基于 3.4.2 版本。通过newCall访问RealCall如果是同步请求,调用execute如果是异步请求,调用enqueue以上都是通过Dispatcher将Call添加到队列调用遍历拦截器,执行请求获取结果将Call从 队列移除。
2023-03-16 19:07:53
553
原创 OKHttp 源码解析(二)拦截器
上一篇解读了OKHttp 的基本框架源码,其中 OKHttp 发送请求的核心是调用构建拦截器链,遍历拦截器,执行请求,执行完成时返回结果。这篇看一下 OKHttp 的拦截器链。本文查看 OKHttp 源码的版本是 3.4.2.OkHttp 允许开发者自定义拦截器并优先执行开发者定义的拦截器。具体做法如下定义拦截器实现 OkHttp 的拦截器接口// ... } } // 官网解释:观察、修改并潜在地短路发出的请求和返回的相应响应。// 通常,拦截器会添加、删除或转换请求或响应的标头。
2023-03-16 19:06:51
1355
原创 iOS 由WhatsApp分享到系统分享
官方文档解释:https://faq.whatsapp.com/zh_cn/iphone/23559013 其实就是调用系统分享,whatsapp是Facebook旗下的一款app,没有像Facebook一样提供分享的SDK API.whatsapp分享链接时附带的图片分享不出去.链接分享使用canOpenURL/openURL 打开第三方APP。(需要在.plist文件中添加whatsapp白名单)分享图片使用系统的UIDocumentInteractionController共享文..
2020-09-04 10:31:44
1730
原创 Android 集成 google 登录并获取 性别等隐私信息
前言公司做海外产品的,集成的是 google 账号登录,账号信息、邮箱等这些不涉及隐私的按 google 的正常登录流程可以轻松实现 。但是一旦需要获取涉及隐私的信息就比较麻烦,文档也不是十分清晰,非常难找,很多坑。google 账号登录官方链接:https://developers.google.com/identity/sign-in/android/starthttps://developers.google.com/identity/sign-in/android/sign-ingoogl
2020-06-08 11:03:53
1218
原创 Java面试题基础
Android 面试题Java 基础部分Java基础(不断更新)Java 是值传递还是引用传递?有引用传递吗?值传递和引用传递形参和实参JVM 内存分配Java基础(不断更新)大厂非常重视Java基础Java 是值传递还是引用传递?有引用传递吗?原文参考:https://juejin.im/post/5bce68226fb9a05ce46a0476值传递和引用传递值传递:在方法被调用时,实参通过形参把它的内容副本传入方法内部,也就是方法内部操作的是实参值的一个拷贝副本,方法内对形参的任何操作不
2020-05-17 22:14:42
393
原创 Git追加本次提交到上次提交
Git 追加提交到上次提交命令Q&A命令有时候为了减少提交日志,并且添加的内容是与上次的内容属于同一个提交内容的,为了好维护,会将本次的提交追加到上次的提交中。使用git 命令如下:git add . (添加提交内容)git commit --amend (追加到上次提交)使用–amend 后会到编辑页面,可以编辑提交日志,编辑后:wq! 保存编辑并退出。如无需编辑直接 :q!...
2020-03-16 11:10:21
5056
原创 Sign in with Apple(object-c) 从开发者后台到服务端验证
Sign in with Apple前言准备工作开发工作(object-c编写)基本流程添加依赖库创建Apple登录Button向Apple发起请求接收Apple的回调注意:用户注销 AppleId 或 停止使用 Apple ID 的状态处理服务端验证参数的获取方法:Q&A前言根据Apple发布的新政策,如果你的App有第三方登录,例如微信、QQ、Facebook、twitter等第三...
2020-03-15 19:10:32
6866
1
原创 Gradle自定义打jar包脚本
前言聚合类型的手游SDK打包涉及多渠道打包,有需求是将渠道的java代码,根据不同的需求(规则)生成不同的jar包,而不是全部都放进一个jar包中。所以需要自己写脚本自定义打jar包。前提保证module 是 library的模式通过合并文件的方式def zipFile = file(''build/intermediates/packaged-classes/debug/classes...
2019-09-04 09:53:01
1400
原创 ios如何制作自己的静态库及遇到的问题
iOS如何制作自己的静态库前言之前一直在做的SDK,SDK的项目结构是项目工程下 有工作空间A,A工作空间又SDK静态库工程frameworkB,有静态库工程Frameworkdemo测试工程。其中使用pod管理需要引用的第三方SDK,之前一直是这样的结构打包出来的framework给第三方使用,没有出现什么问题,最近一个第三方使用时出现大量warnings users/username//l...
2019-07-26 18:40:03
675
原创 归并排序及分治算法
分治算法:分解:将大规模的复杂问题拆分成可自然而然解决或已解决的小规模问题,小规模问题与大规模问题形式相同解决:递归解决小规模问题的合并:将各子问题的解合并得到原问题的解。归并排序:将问题一分为2,使用递归进行排序将左右两边的排好序的数组合并为一个数组。代码实现:private static void mergeSort(int[] array,int start,int ...
2019-07-04 18:10:35
576
2
原创 插入排序、二分法查找、合并有序数组、选择排序
插入排序基本概念:将未排序序列通过向有序序列从后向前扫描,找到合适的位置插入到有序序列里。基本步骤:从第二个元素开始。(第一个元素默认为是有序序列)取出下一个元素,在已排序序列中从后向前扫描该元素大于新元素就往后移动重复3步骤找到合适的位置,将新元素插入对应位置重复1-5例如:int[] arrays = {2,3,9,17,4,0,7,8};有序序列:2,未排序序列 ...
2019-07-01 14:43:42
424
原创 ios引导商店评分问题
由于项目有需求在应用内引导评分功能,新手记录开发过程。iOS引导评分有三种方式:详见以下博客地址,这位大佬总结的非常到位:https://blog.youkuaiyun.com/jiadabin/article/details/78473927简述如下:1、跳转Appstore可以跳转到App Store评分页面,同时评分及写评论。2、在自已的应用内打开评分弹框(iOS10.3之后)不能写评论,...
2019-02-27 21:39:12
2393
原创 Flutter的基本介绍--通过Flutter的第一个项目
前言Flutter从2018年2月底在世界移动大会(MWC)发布第一个bata版;5月的GoogleI/O大会上发布 bata3;6月底GMTC宣布了首个预览版;9月谷歌开发者大会上发布预览版2;12月宣布发布正式版1.0版。而且5月I/O大会后据说闲鱼已经在使用了,可谓发展之迅速,应该还是很被大家看好的。本文算是看了谷歌官方文档及flutter文档的翻译加上自己的肤浅理解的总结吧。原文可查看...
2018-12-28 19:23:23
989
原创 Android性能优化之内存泄漏记录
根本原因应该被回收的对象没有被回收,一直占用内存,导致内存泄漏,如果内存泄漏过多,有可能造成内存溢出(OOM)。内存溢出当内存泄漏过多时,应用需要的内存超过系统分配的内存限额时会导致内存溢出引发crash。常见的内存泄漏1、单例(静态变量引起)如果单例需要持有一个上下文,而如果传入的上下文是短生命周期的activity,单例的生命周期跟app一致,是长生命周期的上下文持有短生命周期的实...
2018-12-05 12:42:10
288
原创 Android线程间通信-Handler消息机制
需要handler消息机制的原因在android中由于UI线程并不是线程安全的,如果有子线程更新UI容易导致数据错乱,如果UI线程设置为线程安全的话导致效率低下;而UI线程做耗时操作容易导致ANR发生。所以需要由子线程做耗时操作当子线程需要更新UI时通知主线程更新UI,而线程间的通信就由Handler消息机制完成。Handler消息机制原理在主线程创建一个handler的同时创建了lo...
2018-12-04 12:36:15
633
原创 Android四大组件-Service
概念:android 四大组件之一,提供在后台运行的服务,属于计算型组件。特点:在后台运行,无用户界面,生命周期长。启动方式startservice:不与Activity绑定,启动之后会无限期的运行下去,除非遇到内存低情况被回收,需要调用stopService或stopSelf才会停止。**生命周期 :**onCreate(只执行一次)-onStartCommand-服务运行-on...
2018-12-02 13:28:09
361
原创 Android四大组件-ContentProvider
概念:内容提供器,Android 四大组件之一。作用:可以操作非本应用程序的数据,实现跨进程数据共享。优点:可以在保证数据的安全性的情况下实现数据跨进程共享。因为contentprovider规范了统一的数据访问接口。对底层数据存储方式抽象,即如果您将底层数据存储方式修改对数据应用层不会有影响。原理:底层实现原理是Binder机制,Binder实现原理是通过Binder类,实现IB...
2018-11-27 15:36:47
232
原创 Java设计模式-装饰者模式
定义:装饰者是在不改变对象的情况下动态给对象添加属性和行为,将责任动态的附加在对象上。 与继承有类似功能即扩展功能。装饰者模式与继承的区别:**继承:**在子类扩展功能的时候是静态的,并且是已知需要扩展的功能,是在编译时实现的。**装饰者模式:**比继承更灵活,可以动态的扩展功能,可以在编译时实现。符合开闭原则:类对扩展开发,对修改关闭。 这也是装饰者模式的优点。缺点:会出现很多的...
2018-11-25 23:20:13
180
原创 Java基础面试题涉及的知识点-部分(后续会不断更新)
二进制与十进制的转换二进制是01表示数字的数制,基数是2,逢2进1。Java十进制及二进制表示对比:十进制:0 1 2 3 4 5 6 7 8 9二进制:0000 0001 0010 ...
2018-11-20 17:51:12
272
原创 Java数据结构-数组解析及类封装自定义数组实现
概念:数组是Java数据结构中最基本的数据,是存储 一组长度固定的 同数据类型的集合。优点:插入快:对于无序数组,只需要在数组末尾增加数据即可。但对于有序数组,需要查找到固定的位置,再插入数据,相对无序数组结构简单缺点:根据元素值查找慢:如果根据下标查找会比较快,但是根据元素值查找对于无序数组需要从第一个元素开始遍历进行查找知道查找到所需要的数据。如果是有序数组可以通过合适的排序...
2018-11-19 16:23:12
545
原创 Java设计模式-单例模式、观察者模式、工厂模式
单例设计模式概念:全局只有一个实例,自行实例化对象,自行向整个系统提供这个实例。应用场景:需要全局只有一个实例的时候,如保存用户信息。只有一个访问途径优点:全局只有一个实例,避免了频繁的创建实例,耗费的资源。提供了对唯一实例的受控访问。允许改变数目的实例。缺点:单例模式没有抽象层,因此单例类扩展困难。单例职责过重。滥用单例可能造成其他问题,例如:持有上下文无法释...
2018-11-16 16:36:54
995
原创 源码分析HashMap、Hashtable、HashSet的区别
HashMap源码分析-基于JDK1.8基本结构1)、初始变量public class HashMap<K, V> extends AbstractMap<K, V> implements Map<K, V>, Cloneable, Serializable { private static final long serialVersionUID ...
2018-11-13 17:09:38
324
原创 Listview与Recycleview的区别-(用法及缓存机制)
用法上的区别1、listview的用法继承的时BaseAdapter,需要重写四个方法不强制使用viewholder可以直接使用item的点击事件不用单独设置分隔线不可以定向刷新某一条数据示例代码如下:项目代码详见地址:public class MyListAdapter<T> extends BaseAdapter { private static fi...
2018-11-09 00:19:32
4052
原创 iOS报错:linker command failed with exit code 1 (use -v to see invocation)寻找答案之旅
iOS报错:linker command failed with exit code 1 (use -v to see invocation错误出现问题分析最终解决方案错误出现Android开发程序员,接手了公司的iOS项目,接入了微信登录,本来运行的好好的,后来检查的时候看到微信接入官网说要注意是不是微信的最新版本,不是的话要更新,就使用cocodpod更新了一下,然后就再也编译不了了。。。...
2018-11-06 17:23:22
3496
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人