AnySDK Framework

Cocos Creator 内置 Cocos 引擎中包含了 AnySDK Framework 资源。即开发者构建发布出的平台工程已经包含了 AnySDK Framework。该章节介绍了如何选择性使用 AnySDK。

使用 AnySDK

原生

无需使用 AnySDK

开发者若不需要使用 AnySDK,目前只支持手动删除相关文件,删除步骤如下:

  • 删除 frameworks/runtime-src/Classes 下的

    jsb_anysdk_basic_conversions.cpp
    manualanysdkbindings.cpp
    jsb_anysdk_protocols_auto.cpp
    SDKManager.cpp
    jsb_anysdk_basic_conversions.h
    manualanysdkbindings.hpp
    jsb_anysdk_protocols_auto.hpp
    SDKManager.h

  • 删除 main.js 下的

    // anysdk scripts
    if (cc.sys.isNative && cc.sys.isMobile) {
    jsList = jsList.concat(['jsb_anysdk.js', 'jsb_anysdk_constants.js']);
    }

在需要定制的项目路径下添加一个 build-templates 目录,里面按照平台路径划分子目录, 将删除代码的 main.js拷贝在子目录下结构类似:

  1. project-folder
  2. |--assets
  3. |--build
  4. |--build-templates
  5. |--web-mobile
  6. |--main.js
  7. |--jsb-binary
  8. |--main.js
  9. |--jsb-default
  10. |--main.js
  • Eclipse 工程

    • 删除 libs 下的 libPluginProtocol.jar 文件
    • 删除 res 下的
      drawable/plugin_btn_close.png
      drawable/plugin_ui_ad.png
      values-en/plugin_string.xml
      values/plugin_string.xml
      layout/plugin_ads.xml
      layout/plugin_login.xml
  • 删除 jni 下的 Android.mk 中 LOCAL_WHOLE_STATIC_LIBRARIES := PluginProtocolStatic
  • 删除 jni 下的 Android.mk 中

    LOCAL_SRC_FILES := ../../Classes/SDKManager.cpp \

    1. ../../Classes/jsb_anysdk_basic_conversions.cpp \
    2. ../../Classes/manualanysdkbindings.cpp \
    3. ../../Classes/jsb_anysdk_protocols_auto.cpp
  • 删除 jni 下的 Application.mk 宏定义 APP_CPPFLAGS := -DPACKAGE_AS

  • 修改 src/org/cocos2dx/javascript/SDKWrapper.java 文件中 private final static boolean PACKAGE_AS = true;,true 修改为 false

    • Android Studio 工程
  • 删除 libs 下的 libPluginProtocol.jar
  • 删除 res 下的
    mipmap/plugin_btn_close.png
    mipmap/plugin_ui_ad.png
    values-en/plugin_string.xml
    values/plugin_string.xml
    layout/plugin_ads.xml
    layout/plugin_login.xml
  • 删除 jni 下的 Android.mk 中 LOCAL_WHOLE_STATIC_LIBRARIES := PluginProtocolStatic
  • 删除 jni 下的 Android.mk 中
    LOCAL_SRC_FILES := ../../Classes/SDKManager.cpp \
    1. ../../Classes/jsb_anysdk_basic_conversions.cpp \
    2. ../../Classes/manualanysdkbindings.cpp \
    3. ../../Classes/jsb_anysdk_protocols_auto.cpp
  • 删除 jni 下的 Application.mk 宏定义APP_CPPFLAGS := -DPACKAGE_AS
  • 修改 src/org/cocos2dx/javascript/SDKWrapper.java 文件中 private final static boolean PACKAGE_AS = true;,true 修改为 false
    • Xcode 工程
  • 删除 libPluginProtocol.a 库
  • Xcode 删除 libPluginProtocol.a 引用
  • Xcode 删除 Classes 下的引用
    jsb_anysdk_basic_conversions.cpp
    manualanysdkbindings.cpp
    jsb_anysdk_protocols_auto.cpp
    SDKManager.cpp
    jsb_anysdk_basic_conversions.h
    manualanysdkbindings.hpp
    jsb_anysdk_protocols_auto.hpp
  • 删除预编译宏 PACKAGE_AS
    • Web 工程
  • 找到 index.html 文件删除

删除 AnySDK 后仍需使用

  • 使用 Cocos Console 调用命令 cocos package import -b anysdk -p project-path —anysdk

    更新 AnySDK Framework

  • 使用 Cocos Console 调用命令 cocos package update -p project-path —anysdk 即可实现更新

    接入常见问题

  • 渠道包出现闪退现象

    • 产生原因: 构建出的 Cocos 工程中 frameworks/runtime-src/Classes/SDKManager.cpp 的 loadAllPlugins 方法已经调用了 init 方法,用户在 JS 层调用 init 方法无法生效。
    • 解决方案: 用户无需再 JS 层调用 'init' 方法,需使用构建出的 Cocos 工程中 frameworks/runtime-src/Classes/SDKManager.cpp 的 loadAllPlugins 方法 init方法,传递 appKey、appSecret、privateKey、oauthLoginServer

原文: http://docs.cocos.com/creator/1.10/manual/zh/sdk/anysdk/anysdk-framework.html