zoukankan      html  css  js  c++  java
  • 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" //这里的路径要依据你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自己主动更新。





  • 相关阅读:
    NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]
    Codeforces Round #278 (Div. 2) B. Candy Boxes [brute force+constructive algorithms]
    noj 2069 赵信的往事 [yy题 无限gcd]
    noj 2068 爱魔法的露露 [线性扫一遍]
    Codeforces Round #275 (Div. 2) B. Friends and Presents 二分+数学
    Word2007文档中怎么输入上标下标
    Linux下查找命令
    矩阵求逆
    LRC算法在人脸识别中应用
    java从txt文档读写数据
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6991443.html
Copyright © 2011-2022 走看看