Cocos2d-xでアプリのバージョンを取得する

Cocos2d-xからiOS,Androidのアプリバージョンを取得する処理を作成したのでメモします。
JNIのクラスなど、ネイティブ連携のクラスはCocos2d-x上からTwitterにツイートする - おかひろの雑記などと同じ形で作成してあるとします。

今回使用したバージョン

  • Cocos2d-x 3.2

NativeCodeLauncher.h

	// バージョン番号取得
	static std::string getVersionNo();

iOS向け
NativeCodeLauncher.mm

// バージョン番号取得
static std::string static_getVersionNo()
{
	NSString *versionNo = [NativeCodeLauncher getVersionNo];
	std::string ret([versionNo UTF8String]);
	return ret;
}

...

namespace Cocos2dExt
{
	// バージョン番号取得
	std::string NativeCodeLauncher::getVersionNo()
	{
		return static_getVersionNo();
	}

NativeCodeLauncher_objc.h

// バージョン番号取得
+(NSString *)getVersionNo;

NativeCodeLauncher_objc.mm

// バージョン番号取得
+(NSString *)getVersionNo
{
	return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
}

Android向け
NativeCodeLauncher.cpp

	// バージョン番号取得
	std::string NativeCodeLauncher::getVersionNo()
	{
		return getVersionNoJNI();
	}

NativeCodeLauncherJni.h

	// バージョン番号取得
	extern std::string getVersionNoJNI();

NativeCodeLauncherJni.cpp

// バージョン番号取得
std::string getVersionNoJNI()
{
	JniMethodInfoEx methodInfo;
        
        if (!getStaticMethodInfo(methodInfo, "getVersionNo", "()Ljava/lang/String;"))
        {
            return "";
        }
		
	jstring retString = (jstring)methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID);
		
        // jstringをstd::stringに変換
        std::string ret = JniHelper::jstring2string(retString);
		
        // 解放処理
        methodInfo.env->DeleteLocalRef(retString);
        methodInfo.env->DeleteLocalRef(methodInfo.classID);
		
        return ret;
}

AppActivity.java

	// バージョン番号取得
	public static String getVersionNo()
	{
		PackageManager pm = me.getContext().getPackageManager();
		String versionName = "";
		try
		{
			PackageInfo packageInfo = pm.getPackageInfo(me.getContext().getPackageName(), 0);
			versionName = packageInfo.versionName;
		}
		catch(NameNotFoundException e)
		{
			e.printStackTrace();
		}
		
		return versionName;
	}

戻り値の型はstd::stringがいいと思います。const char*にすると、Androidでうまくいきませんでした。
(私のやり方が良くなかったのかもしれません。)