随着手游行业的蓬勃发展,以及各大IP加入,对于Android手游插件sdk的开发也多了起来。

下面我将给大家分享手游插件的开发细节

1.sdk开发与传统的app开发的不同点
首先做为sdk由于要兼容eclipse开发,sdk里面是没有R文件的(Android studio 可打成aar包里面有R文件,但为了兼容eclipse开发,这里真的想吐槽一下eclipse的ADT工具Google都不更新了,还是有大量游戏使用eclipse开发,也有不少国企和央企开发内部使用的app也是用eclipse开发的,小伙伴们快点使用Android studio开发吧,Android studio是可以直接导入eclipse项目)。
小伙伴就要问没有R文件如何找控件呢,不得不说google还是给我们提供了方法,
下面给大家展示工具类:

/**
* 源文件工具类
*/
public class ResourceUtil {
/**
* 通过上下文找到Resource类
*
* @param paramContext
* @return
*/
public static Resources getResources(Context paramContext) {
return paramContext.getResources();
}

/*** 通过上下文找到layoutId* @param paramContext  上下文* @param paramString   xml文件名* @return*/
public static int getLayoutId(Context paramContext, String paramString) {return getResources(paramContext).getIdentifier(paramString, "layout",paramContext.getPackageName());
}
/*** 通过上下文找到stringId* @param paramContext  上下文* @param paramString   xml文件名* @return*/
public static int getStringId(Context paramContext, String paramString) {return getResources(paramContext).getIdentifier(paramString, "string",paramContext.getPackageName());}
/*** 通过上下文找到drawableId* @param paramContext  上下文* @param paramString   xml文件名* @return*/
public static int getDrawableId(Context paramContext, String paramString) {return getResources(paramContext).getIdentifier(paramString,"drawable", paramContext.getPackageName());
}
/*** 通过上下文找到StyleId* @param paramContext  上下文* @param paramString   xml文件名* @return*/
public static int getStyleId(Context paramContext, String paramString) {return getResources(paramContext).getIdentifier(paramString, "style",paramContext.getPackageName());
}
/*** 通过上下文找到Id* @param paramContext  上下文* @param paramString   xml文件名* @return*/
public static int getId(Context paramContext, String paramString) {return getResources(paramContext).getIdentifier(paramString, "id",paramContext.getPackageName());
}
/*** 通过上下文找到colorId* @param paramContext  上下文* @param paramString   xml文件名* @return*/
public static int getColorId(Context paramContext, String paramString) {return getResources(paramContext).getIdentifier(paramString, "color",paramContext.getPackageName());
}
/*** 通过上下文找到arrayId* @param paramContext  上下文* @param paramString   xml文件名* @return*/
public static int getArrayId(Context paramContext, String paramString) {return getResources(paramContext).getIdentifier(paramString, "array",paramContext.getPackageName());
}
/*** 通过上下文找到animId* @param paramContext  上下文* @param paramString   xml文件名* @return*/
public static int getAnimId(Context paramContext, String paramString) {return getResources(paramContext).getIdentifier(paramString, "anim",paramContext.getPackageName());
}
/*** 通过上下文找到dimenId* @param paramContext  上下文* @param paramString   xml文件名* @return*/
public static int getDimenId(Context paramContext, String paramString) {return getResources(paramContext).getIdentifier(paramString, "dimen",paramContext.getPackageName());
}/*** 进一步封装直接找view* @param context  上下文* @param v        父控件* @param name     xml文件名* @return*/
public static View findViewByName(Context context, View v, String name) {return v.findViewById(ResourceUtil.getId(context, name));
}/***   进一步封装直接找到布局的视图* @param context  上下文* @param name    xml文件名* @return*/
public static View inflateViewByXML(Context context, String name) {return View.inflate(context, ResourceUtil.getLayoutId(context, name), null);
}
}

其次用户在接入sdk时,要将sdk所需要的uses-permission,activity,service,receiver等配置项加入到demo工程的AndroidManifest中去,其中还一项标签也很重要 这个标签是用来读取
后台给用户分配的appId,appKey等数据的,下面就为大家展示demo的AndroidManfest代码:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anfan.pay.demo.sdkdemo"
android:versionCode="25"
android:versionName="2.5">
<!-- 需要的权限,请添加到自己工程的清单文件中 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- testing -->
<uses-permission android:name="android.permission.READ_LOGS" />
<!-- 浮动通知生成截图权限 --><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!--发送短信的权限-->
<uses-permission android:name="android.permission.SEND_SMS" />
<!-- 微信支付 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<!--NETWORK_PROVIDER-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--   GPS-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<applicationandroid:allowBackup="true"android:icon="@drawable/anfan_icon"android:label="@string/app_name"><activityandroid:name="com.anfan.pay.demo.sdkdemo.GameActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:label="@string/app_name"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name="com.anfeng.pay.activity.AFClickLogin"android:configChanges="orientation|keyboardHidden|screenSize"android:screenOrientation="behind"android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" /><activityandroid:name="com.anfeng.pay.activity.AFBoundPhone"android:configChanges="orientation|keyboardHidden|screenSize"android:screenOrientation="behind"android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/><activityandroid:name="com.anfeng.pay.activity.AFLogin"android:configChanges="orientation|keyboardHidden|screenSize"android:screenOrientation="behind"android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" /><activityandroid:name="com.anfeng.pay.activity.AFMissPass"android:configChanges="orientation|keyboardHidden|screenSize"android:screenOrientation="behind"android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/><activityandroid:name="com.anfeng.pay.activity.AFPayType"android:configChanges="orientation|keyboardHidden|screenSize"android:launchMode="singleTask"android:screenOrientation="behind"android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/><activityandroid:name="com.anfeng.pay.activity.AFRegister"android:configChanges="orientation|keyboardHidden|screenSize"android:screenOrientation="behind"android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/><!-- 支付宝相关 --><activityandroid:name="com.alipay.sdk.app.H5PayActivity"android:configChanges="orientation|keyboardHidden|navigation|screenSize"android:exported="false"android:screenOrientation="behind"android:windowSoftInputMode="adjustResize|stateHidden"/><activityandroid:name="com.alipay.sdk.app.H5AuthActivity"android:configChanges="orientation|keyboardHidden|navigation"android:exported="false"android:screenOrientation="behind"android:windowSoftInputMode="adjustResize|stateHidden"/><!-- 银联 --><activityandroid:name="com.unionpay.uppay.PayActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:excludeFromRecents="true"android:label="@string/app_name"android:windowSoftInputMode="adjustResize" /><!-- 微信支付 --><activityandroid:name="com.ipaynow.wechatpay.plugin.inner_plugin.wechat_plugin.activity.WeChatNotifyActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:screenOrientation="portrait"android:theme="@android:style/Theme.Dialog"/><service android:name="com.game.alarm.download.DownloadService"><intent-filter><action android:name="download.service.action" /></intent-filter></service><!-- 提供给合作方的gameId或appId(应用数字id) 接入时请修改值为在商户后台申请的appid --><meta-data android:name="appID" android:value="778" /><meta-data android:name="appKey" android:value="4c6e0a99384aff934c6e0a99" /><!-- SDK需要知晓请求的来源 ,即分销商,游戏厂商无须修改 --><meta-data android:name="retailer" android:value="255" />
</application>
</manifest>

此时当用户初始化sdk的时候,客户端就能知道是谁接入,这样就能完成与后台的数据交互了,读取meta-data标签的代码:

/***  读取meta-data的整型值*  <meta-data android:name="appID" android:value="778" />*   META_DATA_NAME 就是appID ,* @param context* @return  就是value的值*/
private static  String metaDataValueOfInter(Context context){try {ApplicationInfo applicationInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);String valueOfInter=String.valueOf(applicationInfo.metaData.getInt(META_DATA_NAME));return  valueOfInter;} catch (Exception e) {e.printStackTrace();}return  null;
}/***  读取meta-data的字符串*  <meta-data android:name="appKey" android:value="4c6e0a99384aff934c6e0a99" />*   META_DATA_NAME 就是appKey ,* @param context* @return 就是value的值*/
private static  String metaDataValueOfString(Context context){try {ApplicationInfo applicationInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);String valueOfInter=applicationInfo.metaData.getString(META_DATA_NAME);return  valueOfInter;} catch (Exception e) {e.printStackTrace();}return  null;}

今天就先给小伙伴们介绍到这里,欢迎大家给我留言,也可发邮件给

emali:805256509@qq.com

关于android手游Sdk开发的专题(一)相关推荐

  1. android手游sdk开发教程,Android SDK开发基本教程

    一.本文章总计460字,需要花费您5分钟时间进行阅读. A.先来理解SDK开发的基本流程.首先,在你的Project中新建一个module,指定为Android Library.再新建一个Activi ...

  2. 鸿蒙 手游sdk 开发教程

    前言 : 各位同学的大家好 , 最近在学习鸿蒙开发, 因为我是从事手游SDK 开发的 之前也写过iOS 手游sdk 开发和安卓手游sdk 开发(kotlin 版本) 效果图: 设计思路 我们需要封装 ...

  3. Android手游SDK那点事(四)聚合打包

    更新: 聚合SDK 我们的SDK其实也可以称为聚合SDK,所谓聚合,就是CP游戏方接入聚合SDK,然后通过打包工具将游戏分发到更多渠道上,我们的SDK也有这个能力,相对渠道少一点 分发渠道包 以下操作 ...

  4. Android手游SDK那点事(二)SDK项目结构设计(初版,废弃)

    项目构建 上一个完整架构图 以KSDK为名称模拟项目构建 项目建议: 1.这里游戏sdk不使用mvp或者mmvm的方式,其实这两种模式开发者在开发应用的时候不要盲目的使用,根据自己项目业务情况选择一个 ...

  5. Android手游SDK那点事(一)简述

    常见名词 CP:游戏厂商,就是开发游戏的,一般情况下CP常常指提供游戏的一方,不一定是研发,只要接入我们SDK,提供给我们游戏,你就是CP. 发行:代理游戏产品,进行渠道的发行. SDK:这里指游戏开 ...

  6. 手游sdk开发有哪些功能?

    在游戏对接的时候,由于不同的游戏要接入不同的SDK,这些SDK参数多,接口不统一,而且更新和维护费用也很高.SDK现在的功能,就是在频道上建立一个统一的界面,让所有的用户家都能对接游戏. 手游SDK大 ...

  7. 浅析android手游lua脚本的加密与解密

    2018.05.02更新 这段时间在翻备份的硬盘,突然发现了以前的分析项目和代码,从里面提取了之前附件的内容,现在上传给大家,真是柳暗花明又一村啊.附件包括201703版本的梦幻手游里面提取的so文件 ...

  8. 安卓修改大师揭秘Android手游破解全过程

    由于安卓修改大师的零门槛学习成本,让安卓应用程序的破解和二次开发变得相当简单,也正因如此,手机APP遭受破解和盗版问题长期存在,且愈演愈烈.尤其是手游行业,如刀塔传奇.植物大战僵尸.2048等知名游戏 ...

  9. 手游SDK到底是什么?

    一.SDK概念 SDK,即Software Development Kit,软件开发工具包的意思,通俗点说,就是辅助开发某一类软件的相关文档.范例和工具的集合,不过我们平时所说到的sdk其实会更加简单 ...

最新文章

  1. R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战
  2. 关键短语抽取及使用BERT-CRF的技术实践
  3. Python(17)_urllib下的parse的编码解码函数
  4. .NET中的UI自动化测试
  5. 如何执行字符串的PHP代码
  6. 到底如何调用Async异步函数
  7. java 开根号_Java实现开根号运算(不使用数组和String)
  8. 3GPP TS 29244-g30 中英文对照 | 7.3 Message Types
  9. 如何检测异方差并纠正它?
  10. GT610的亲兄弟 GT620
  11. 【Amoeba】amoeba实现mysql读写分离
  12. 关于GPS定位高德开放平台SDK深度应用
  13. SQL注入--报错和盲注
  14. 2022年 微前端技术调研- 图文并茂
  15. 微信小程序连接百度地图API实现天气查询
  16. 外链屏蔽解除?QQ还是打不开淘宝、抖音链接
  17. 以Base64字符串形式上传文件——服务器端Java/Servlet接受请求数据中的字符串内容并转换成文件
  18. appium java环境_Appium java 环境配置
  19. 实在智能“数字员工”发布,谈AI+RPA发展趋势,发布SaaS平台,并开源可供开发者下载打造小型机器人
  20. 【代码随想录二刷】day9 | 28. 实现 strStr() 459.重复的子字符串

热门文章

  1. CANoe/CANalyzer诊断功能的深入理解以及CAPL诊断编程实现
  2. PS圆角图片并保留透明背景
  3. java 多个二维码读取报错
  4. 微信小程序 input双向绑定
  5. Win10系统安装MySQL5.5.62 解压版
  6. 更新linux内核方法
  7. 数据丢失这个问题怎么解决?
  8. 蘑菇云「行空板Python入门教程」第八课:智慧农业可视化系统
  9. 金税 TC718K 驱动
  10. Linux新手之路 - date cal 命令