Android 5.0 Lolipopに変わって
各社共に色々と問題が起こっているようです。
主なAndroidアプリのAndroid 5.0(Lollipop)対応状況まとめ
自分のアプリも例に漏れず問題が発生しましたが、
どうやら対応出来たみたいですので、ここにメモしておきます。
問題その1 起動出来ない
Android 5.0 Lolipop の端末で起動した直後に
「アプリケーションに問題が発生しました」
とネイティブダイアログが表示されて起動出来ませんでした。
エラー内容は
JNI DETECTED ERROR IN APPLICATION : illegal class name "jp.co.game.hoge"
art/runtime/check_jni.cc(65)
このような感じでした。
その原因はJNIの記述法にありました。
今まで
JNIEnv *pEnv;
//~~~
jclass cls = pEnv->FindClass("jp.co.game.hoge");
//~~~
と書いていてAndroid4系まで問題なく動作してましたが、これを
JNIEnv *pEnv;
//~~~
jclass cls = pEnv->FindClass("jp/co/game/hoge");
//~~~
このようにスラッシュ区切りに変更。
また、jboolean型の値を取得するのに
JNIEnv *pEnv;
jclass classId;
jmethodID methodId;
//~~~
jboolean flg = (jboolean)pEnv->CallStaticIntMethod(classId , methodId);
//~~~
とintから受けてもAndroid4系までは大丈夫でしたが、
これも5.0ではエラーになりました。
JNIEnv *pEnv;
jclass classId;
jmethodID methodId;
//~~~
jboolean flg = (jboolean)pEnv->CallStaticBooleanMethod(classId , methodId);
//~~~
と、CallStaticBooleanMethodに変えればOKです。
問題その2 BGMが鳴らない
もう一つ問題が発生しました。
SEは鳴っているのですが、BGMが再生されていませんでした。
こちらはすでにcocos2d-x公式で修正されておりました。
cocos2d-x github
こちらの
Cocos2dxMusic.java
を
自分のプロジェクトのorg/cocos2dx/lib/Cocos2dxMusic.java
に上書きまたは書き換えで無事にBGMが鳴るようになりました。
BGMの切り替わりも問題なく切り替わりました。
とりあえず以上
自分の対応はこれでひとまず完了となりました。
その他全体的に触ってみましたが、特に問題は無さそうです。
が、
が!
が!!!
ケース・バイ・ケースな所もあると思いますので、
あくまで参考程度にとどめて頂けると助かります。