anySdk的常规接入流程

本文详细介绍了anySDK的接入流程,包括从官网下载SDK,修改Android.mk文件和AndroidManifest.xml,初始化JavaVM,JAVA层和C++层的框架初始化,以及加载和卸载SDK插件的步骤。在配置过程中,强调了Android.mk的编译选项调整和AndroidManifest.xml中权限的添加。同时,文中提示了初始化AnySDK Framework后才进行加载插件操作以避免某些SDK的闪屏问题。

首先 anySDK  在这里了解 基本信息 http://docs.anysdk.com/SDKParams

这里主要讲的是接入anysdk 的流程

1.官网下载anySDK  http://docs.anysdk.com/Home

2 .

为了集成AnySDK Framework,您首先需要到AnySDK官方网站注册登陆,然后到AnySDK Framework的下载页面( http://www.anysdk.com/downloads ) 下载完整的anysdk框架包,解压以后可以看到如下图的目录结构:

AnySDK Framework目录结构2.png

下载得到的AnySDK Framework框架资源目录内各部分介绍如下图所示:

AnySDK Framework目录结构.png


在android工程目录下面新建protocols目录,然后将上一步选择的对应版本框架目录下的include文件夹和android文件夹拷贝到protocols下面

.将框架目录下的res文件夹中的所有资源文件拷贝到工程项目android对应的文件中。

3.配置环境

在工程目录下jni/application.mk

 找到 APP_STL := c++_static 替换为

APP_STL := gnustl_static #c++_static


修改Android.mk文件配置framework编译选项
这一步是修改游戏工程中C++代码的ndk编译配置文件Android.mk,将AnySDK提供的framework库链接到游戏工程的库中。
1.将protocols目录添加到NDK_MODULE_PATH环境变量中:在android.mk第一行 LOCAL_PATH := $(call my-dir) 下面新加一行代码
      LOCAL_PATH := $(call my-dir)
      $(call import-add-path,$(LOCAL_PATH)/../)
2. 添加AnySDK framework静态库声明:在android.mk文件的LOCAL_C_INCLUDES声明下面添加一行代码
      LOCAL_WHOLE_STATIC_LIBRARIES := PluginProtocolStatic

注:此处注意语法规则,如果工程原有mk文件中没有其他LOCAL_WHOLE_STATIC_LIBRARIES声明,则添加上面的代码即可,如果mk文件中原来就有其他的LOCAL_WHOLE_STATIC_LIBRARIES声明,那么就需要加在原有声明之后,并且将 :=修改为+=
3. 添加库路径声明代码:在android.mk文件的最后一行添加以下代码
      $(call import-module,protocols/android)

      4 配置 protocols 下的 include文件夹和android文件夹路径
       找到 LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \ 后追加
       $(LOCAL_PATH)/../../protocols/android\
       $(LOCAL_PATH)/../../protocols/include\

导入框架自带的jar包并勾选export选项
步骤如下: 右键点击您的工程,选择 Properties 后选择Java Build Path,在面板上点击 Libraries,通过Add JARs... 将libPluginProtocol.jar引进游戏工程,如图
Jar引用图.jpg          Jar输出.jpg

注:游戏工程API最小支持10

配置AndroidManifest.xml添加框架需要的权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

一般来说,即便不集成AnySDK Framework,大部分的项目也都会注册申请这些权限。

初始化AnySDK Framework

初始化JavaVM
首先,要在游戏工程加载jni的时候为AnySDK framework设置JavaVM引用。先找到JNI_OnLoad函数,此函数是jni被加载时会首先被调用的函数。
以cocos2d-x 3.0版本引擎为例,JNI_OnLoad函数定义在platform/android目录下的javaactivity.cpp中,如下图所示:

Javaactivity.jpg Jni onload.jpg

1.导入头文件并声明命名空间
#include "PluginJniHelper.h"
using namespace anysdk::framework ;

注:此处导入头文件时要根据项目设定的头文件定义路径来写,以保证编译时能成功找到相应头文件

2.添加设置javaVM代码
PluginJniHelper::setJavaVM(vm); // add for plugin
  • 若此处已有其他引擎初始化JavaVM的代码,保留其代码并在后面添加PluginJniHelper::setJavaVM(vm);即可
在JAVA层初始化AnySDK Framework框架
1.首先找到游戏工程的主Activity,以cocos2d-x引擎游戏为例,主Activity即是继承了cocos2dxActivity的Activity。
2.然后在主Activity的onCreate()方法中新增如下代码来初始化AnySDK Framework:
import com.anysdk.framework.PluginWrapper;

public class MainActivity extends Activity{
    protected void onCreate(Bundle savedState)
        {
            super.onCreate(savedState);
            PluginWrapper.init(this); // for plugins
        }
3.重写Activity生命周期相关方法,代码如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
	super.onActivityResult(requestCode, resultCode, data);
	PluginWrapper.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onResume() {
    super.onResume();
    PluginWrapper.onResume();
}
@Override
public void onPause(){
    PluginWrapper.onPause();
    super.onPause();
}
@Override
protected void onNewIntent(Intent intent) {
    PluginWrapper.onNewIntent(intent);
    super.onNewIntent(intent);
}

注:在cocos2d-x 3.0之后的版本中集成cocos2dxActivity之后已经不需要手动实现activity里的生命周期方法,因此如果开发者发现主Activity没有这些方法,就需要自己去重写这个方法(直接拷贝上面的代码片段也可以)

在C++层初始化AnySDK Framework框架
在C++层调用任何AnySDK Framework函数之前都需要调用init函数进行框架初始化,推荐在java层初始化完成之后通知c++层初始化框架,代码如下:
std::string appKey = "BC26F841-OOOO-OOOO-OOOO-OOOOOOOOOOOO";
std::string appSecret = "1dff378a8f254ecOOOOOOOOOOOOO";
std::string privateKey = "696064B29E9A0OOOOOOOOOOOOO";
std::string oauthLoginServer = "http://oauth.anysdk.com/api/OauthLoginDemo/Login.php";

AgentManager::getInstance()->init(appKey,appSecret,privateKey,oauthLoginServer);
注:appKey、appSecret、privateKey这三个参数是在打包工具客户端创建游戏之后生成的游戏唯一参数,可以在打包工具游戏管理界面查看到,如下图:

游戏参数.jpg


而oauthLoginServer参数是游戏服务提供的用来做登陆验证转发的接口地址,在此处配置的接口地址仅用于sim sdk测试模式下(即直接运行母包时)做登录时框架请求的地址,而在正式打出渠道包的时候会被替换成相应渠道在打包工具中配置的地址参数。

加载及卸载SDK插件

1.在初始化框架完成之后加载所有集成的sdk,代码如下:
AgentManager::getInstance()->loadALLPlugin();//对插件进行初始化,包括对各个sdk的初始化

注:由于部分sdk在初始化时涉及到sdk闪屏的操作强烈建议在完成AnySDK Framework框架初始化后调用加载插件操作,例如

import com.anysdk.framework.PluginWrapper;

public class MainActivity extends Activity{
    protected void onCreate(Bundle savedState){
    super.onCreate(savedState);
    PluginWrapper.init(this); // for plugins
    nativeInitPlugins();//通过jni调⽤用初始化函数
}
// 通过jni  java 调c++ 对插件进行初始化 
//c++ 层响应 nativeInitPlugins()方法
extern "C"
{
    JNIEXPORT void JNICALL Java_org_cocos2dx_cpp_nativeInitPlugins(JNIEnv*  env, jobject thiz)
    {
       
          AgentManager::getInstance()->loadALLPlugin();

    }
    
    
    
}2.卸载插件

当游戏不需要插件时,可进⾏行卸载:

AgentManager::getInstance()->unloadALLPlugin();//对插件进行卸载,需要卸载时可调用




评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值