cocos2d-x在3.3版本以后添加了NewAudioEngine,以解决Android5.0上背景音乐导致卡顿等异常现象。但在2.2.6里还没有添加NewAudioEngine,现贴出相应解决办法:
1.修改的相关文件压缩包已上传到百度网盘http://pan.baidu.com/s/1k6lXG?qq-pf-to=pcqq.c2c2.也可通过github查看文件差异 https://github.com/WenhaiLin/cocos2d-x/commit/be0ac68a5e8512c665956acfab90ba5c4e18686f3.后续相关的更新会上传到 https://github.com/WenhaiLin/cocos2d-x/tree/v2-227
主要修改的内容有:
1.cocos2dx/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java
删除Cocos2dxSound相关的代码
2.CocosDenshion/android/Android.mk
添加依赖库:
LOCAL_EXPORT_LDLIBS := -lOpenSLES
-landroid
3.CocosDenshion/android/jni/SimpleAudioEngineJni.h
将音效的api从extern "C"代码块移出

4.https://github.com/WenhaiLin/cocos2d-x/blob/v2-227/CocosDenshion/android/jni/SimpleAudioEngineJni.cpp 1).将音效的api从extern "C"代码块移出
2).添加需要的头文件
#include<SLES/OpenSLES.h>
#include<SLES/OpenSLES_Android.h>
#include<map>
#include<unistd.h>
#include<sys/types.h>
#include<android/asset_manager.h>
#include<android/asset_manager_jni.h>
#include"platform/android/CCFileUtilsAndroid.h"
#include"platform/android/jni/JniHelper.h"
#include"CCDirector.h"
#include"CCScheduler.h"
3).添加相关变量及宏
#define LOGEX(msg) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, "fun:%s,line:%d,msg:%s",__func__,__LINE__,#msg)
/ / engineinterfaces
staticSLObjectItf s_engineObject = NULL;
staticSLEngineItf s_engineEngine = NULL;
// output mixinterfaces
staticSLObjectItf s_outputMixObject = NULL;
static ints_currentAudioID = 1;
static floats_effectVolume = 1.0f;
staticAAssetManager* s_assetManager = NULL;
4).添加AudioPlayer、AudioPlayerController 及相关音效api,具体请参考https://github.com/WenhaiLin/cocos2d-x/blob/v2-227/CocosDenshion/android/jni/SimpleAudioEngineJni.cpp
5).在void endJNI()函数添加opensl相关资源的释放
stopAllEffectsJNI();
if(s_outputMixObject)
{
(*s_outputMixObject)->Destroy(s_outputMixObject);
s_outputMixObject = NULL;
}
if(s_engineObject)
{
(*s_engineObject)->Destroy(s_engineObject);
s_engineObject = NULL;
s_engineEngine = NULL;
}