新项目使用cocos2d-lua(based on cocos2d-x 3.6 and quick 3.5)开发,需要集成SMSSDK。
SMSSDK分别对iOS/android平台提供了SDK,由于没有android开发经验,在集成android SDK的时候遇到了很多问题,也花了很多时间解决,在此记录一下。
开发环境
环境 | 版本 |
---|---|
os | Mac OS X 10.11 |
cocos2d-x | 3.6 |
quick-cocos2d-x | 3.5 |
SMSSDK for android | 1.3.1 |
下载SMSSDK for android
截至20151024,我下载的版本是1.3.1,地址在此
添加到工程
官网上的配置方式并不是很详细,所以在尝试的过程中也走了很多弯路,这当然也和我不熟悉android开发有关系,现将我的经验写在这里,提供给可能有需要的人吧。
解压缩下载的zip包,根据官方配置文档,有四个文件需要包含在工程中:
- libsmssdk.so - MobLogCollector.jar - MobTools.jar - SMSSDK-1.3.1.jar
在自己的项目
proj.android
目录下,新建目录例如叫smssdk
,将libsmssdk.so
拷贝到该目录下将剩余三个jar拷贝到
proj.android/libs
,android.mk会自动编译添加到apk中修改
android.mk
,将libsmssdk.so
添加到生成的module中:
# android.mk
LOCAL_PATH := $(call my-dir)
#####################################################################
# SMSSDK shared library
#####################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := mysmssdk
LOCAL_SRC_FILES := ../smssdk/libsmssdk.so
include $(PREBUILT_SHARED_LIBRARY)
#####################################################################
# app
#####################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := cocos2dlua_shared
LOCAL_MODULE_FILENAME := libcocos2dlua
FILE_LIST := hellolua/main.cpp
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_STATIC_LIBRARIES := cocos2d_lua_static
LOCAL_STATIC_LIBRARIES += cocos2d_simulator_static
LOCAL_SHARED_LIBRARIES := mysmssdk
include $(BUILD_SHARED_LIBRARY)
$(call import-module,scripting/lua-bindings/proj.android/prebuilt-mk)
$(call import-module,tools/simulator/libsimulator/proj.android/prebuilt-mk)
- 根据配置文档,还需要在
AndroidManifest.xml
中配置相应的权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<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.RECEIVE_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />