Cocos2d-x3.1下 Android,APK自動升級
項目要做Android的自動升級,對於我們之前做iOS的轉Cocos開發做Android方面的功能。。。。。
不對說了。這裡記錄下我的實現過程。
原文地址:http://blog.csdn.net/qqmcy/article/details/36713113
首先我們要Crowdsourced Security Testing道Cocos下Android有幾個Activity,我推測是只有一個,如果不對的話請批評指正啊。
所以我們要在主Activity也就是AppActivity.java裡面添加如下代碼:
static AppActivity activity = null;//一定要靜態對象@Overrideprotected void onCreate(Bundle savedInstanceState){// TODO Auto-generated method stubsuper.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自動更新。