Cocos2d-x3.1下 Android,APK自己主动升级
2017-06-12 09:54 tlnshuju 阅读(307) 评论(0) 收藏 举报项目要做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" //这里的路径要依据你project的实际情况进行更改 #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自己主动更新。
浙公网安备 33010602011771号