项目要做Android的自动升级,对于我们之前做iOS的转Cocos开发做Android方面的功能。。。。。

不对说了。这里记录下我的实现过程。

原文地址:http://blog.csdn.net/qqmcy/article/details/36713113

首先我们要先知道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自动更新。





更多相关文章

  1. 性能优化之Java(Android)代码优化
  2. 通过eclipse查看Android源代码(Java)
  3. 【Android】注解框架(四)-- 一行代码注入微信支付
  4. android通过代码来开启和关闭移动网络
  5. [android][利用JNI技术在Android中调用、调试C++代码]
  6. 【Android 开发】: Android 消息处理机制之三: Handler 中 sendM

随机推荐

  1. 浅谈android的selector背景选择器
  2. Eclipse开发Android的配置(包括ADT安装,SDK
  3. Android(安卓)R文件丢失解决办法
  4. Android提供了Animation
  5. Android(安卓)Otto框架浅析
  6. android 巧用动画使您app风骚起来
  7. android:singleLine="true",[...]没有全
  8. 简单明了的分析Android触摸事件,看完再也
  9. Android的MediaPlayer架构介绍
  10. Android(安卓)activity 详解一:activity的