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

随着手游行业的蓬勃发展,以及各大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" />
<application
    android:allowBackup="true"
    android:icon="@drawable/anfan_icon"
    android:label="@string/app_name">
    <activity
        android: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>
    <activity
        android:name="com.anfeng.pay.activity.AFClickLogin"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="behind"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
    <activity
        android:name="com.anfeng.pay.activity.AFBoundPhone"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="behind"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
    <activity
        android:name="com.anfeng.pay.activity.AFLogin"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="behind"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
    <activity
        android:name="com.anfeng.pay.activity.AFMissPass"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="behind"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
    <activity
        android: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"/>
    <activity
        android:name="com.anfeng.pay.activity.AFRegister"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="behind"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
    <!-- 支付宝相关 -->
    <activity
        android:name="com.alipay.sdk.app.H5PayActivity"
        android:configChanges="orientation|keyboardHidden|navigation|screenSize"
        android:exported="false"
        android:screenOrientation="behind"
        android:windowSoftInputMode="adjustResize|stateHidden"/>
    <activity
        android:name="com.alipay.sdk.app.H5AuthActivity"
        android:configChanges="orientation|keyboardHidden|navigation"
        android:exported="false"
        android:screenOrientation="behind"
        android:windowSoftInputMode="adjustResize|stateHidden"/>
    <!-- 银联 -->
    <activity
        android:name="com.unionpay.uppay.PayActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:excludeFromRecents="true"
        android:label="@string/app_name"
        android:windowSoftInputMode="adjustResize" />
    <!-- 微信支付 -->
    <activity
        android: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值