Cocos2d-x3.1下 Android,APK自动升级
项目要做Android的自动升级,对于我们之前做iOS的转Cocos开发做Android方面的功能。。。。。
不对说了。这里记录下我的实现过程。
原文地址:http://blog.csdn.net/qqmcy/article/details/36713113
首先我们要先知道Cocos下Android有几个Activity,我推测是只有一个,如果不对的话请批评指正啊。
所以我们要在主Activity也就是AppActivity.java里面添加如下代码:
static AppActivity activity = null;//一定要静态对象 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); activity = this; } public static Object cppCall_logsth(String name) { return activity; } public void updateversion(String name) { Log.i("ddd", "开始更新"); //下面三行就是Android更新APK的关键 name是apk的路径 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(name)), "application/vnd.android.package-archive"); activity.startActivity(intent); }
之后就是我们在cocos下用C++写了。
首先添加头文件
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include <jni.h> #include "../../cocos2d/cocos/platform/android/jni/JniHelper.h" //这里的路径要根据你工程的实际情况进行更改 #include <android/log.h> #if 1 #define LOG_TAG "JniHelper" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) #else #define LOGD(...) #endif #endif
下面具体的C++调用Android的代码。如果对NDK不熟,可以百度下C++和Android调用
// // // // // Created by 杜甲 on 14-5-31. // // #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) JniMethodInfo minfo; jobject jobj; bool b = JniHelper::getStaticMethodInfo(minfo, "org/cocos2dx/cpp/AppActivity", //类路径 "cppCall_logsth", //静态方法名 "(Ljava/lang/String;)Ljava/lang/Object;"); //括号里的是参数,后面的是返回值。 if (!b) { LOGD("JniHelper::getMethodInfo error..."); }else { std::string key = FileUtils::getInstance()->getWritablePath() + "update_mobile.apk"; jstring jkey = minfo.env->NewStringUTF(key.c_str()); jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID,jkey); } b = JniHelper::getMethodInfo(minfo, "org/cocos2dx/cpp/AppActivity", //类路径 "updateversion", //静态方法名 "(Ljava/lang/String;)V"); //括号里的是参数,后面的是返回值。 if (!b) { LOGD("JniHelper::getMethodInfo error..."); }else { std::string key = FileUtils::getInstance()->getWritablePath() + "apk安装包的名字"; jstring jkey = minfo.env->NewStringUTF(key.c_str()); minfo.env->CallVoidMethod(jobj, minfo.methodID,jkey); } #endif
当然调用代码要写在apk下载完成之后,但为了减少篇幅所以下载代码请自行百度。
以上代码就能够实现apk自动更新。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。