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自动更新。

Cocos2d-x3.1下 Android,APK自动升级,布布扣,bubuko.com

时间: 2024-10-27 00:25:12

Cocos2d-x3.1下 Android,APK自动升级的相关文章

eclipse下Android无法自动生成apk文件怎么办?

现象:创建android工程后,通过手动build/clean或自动build均无法在bin文件夹下生成.apk文件 解决方法:进入windows→perferences→Android→Build,去勾选skip packaging and dexing until....,并重新clean即可生成apk文件

android apk在线升级

现在android开发,一般采用的是CS模式,那么apk的升级,自然而然需要有server端的支持.一般,我们将升级版本以及一个记录升级版本的配置文件(在本文中采用jsonarray格式)放在server端.当Client初始化时,如果检测到server端有更新的版本(读取server的配置文件),则将在server端的升级版本以Http的方式连接,将其下载下来,然后调用android的api进行替换升级. 一.配置文件: update_version.json [{"appname"

Ubuntu下Android APK反编译与重新编译

1.反编译APK文件 反编译APK需要利用ApkTool工具,下载地址 https://bitbucket.org/iBotPeaches/apktool/downloads http://ibotpeaches.github.io/Apktool/install/ 1,按照安装说明,先右键下载apktool的脚本,再下载最新的apktool 2,先确保你的系统安装了32位平台(依赖)库,如果你ubuntu是13.10后版本,可以试试 sudo apt-get install lib32z1 l

Android apk增量升级

前言 别看本文看上去很简单,实际在实验过程中遇到了很多问题,比如andorid studio下ndk编译报错,而本文呈现给大家的都是最终可行的方法. 所需资源 bzip2 bsdiff ndk 两个不同版本的测试apk 原理 在服务器端,生成最新版与之前所有版本的差分包,为什么是所有版本,因为我们无法知道用户当前版本是什么版本 在手机客户端更新程序时,下载差分包,使用已安装的旧版apk与这个差分包,合成为一个新版apk 校验新合成的apk文件是否完整,检验合成版本的签名是否和已安装客户端一致,如

mac下Android apk 破解流程

相关工具下载:http://pan.baidu.com/s/1kTkOicn 首先你要有eclipse工具, android:adb shell:进入交互shell             ./uiautomatorviewer:查看坐标 破解app步骤: 1,使用apktool,解包后可以修改apk内部结构.apktool d LetvClient_V5.5.1_From_102.apk letvapktool b letv 2,对apk文件重新签名 改为zip后缀,删除META-INF文件夹

android实现自动升级并安装打开

http://blog.csdn.net/wa991830558/article/details/41014673 这是一个比较简单的程序,但网上还是有很多人问起这个问题,并且回答的人,也没有完全回答正确,然后又有很多人去转载非正确的答案,使别人用了之后还是有问题. 如何下载新版本的文件,这里就不赘述了,这里就说一下安装和打开. /**  * 安装APK文件  */ private void installApk() {  File apkfile = new File(mSavePath,Co

Java4Android之APP自动升级

一个成熟的商业APP必须不断的退出新的版本.那么,不可能让用户自己去应用市场去下载新版本的应用,我们应该在应用内部提供自动升级的功能.自动升级其实包含两个层面,一个是整个APP的升级,也就是下载新版本的APP,然后安装替换掉现有的.还有一种升级是模块升级,这种升级一般采用静默升级,就是用户完全不知道.这个在我大迅雷里面经常做的,拿各个渠道去试错,对于一个互联网公司而言是再普通不过的了.而这些模块,肯定是诸如,解析库,下载库,播放库,这些后台库.. 不过今天,我要说的是APP的自动升级,模块的静默

android apk壳

壳对于有过pc端加解密经验的同学来说并不陌生,android世界中的壳也是相同的存在(为什么要有壳这里就不描述咯).看下图(exe = dex):    概念清楚罗,我们就说下:壳最本质的功能就是实现加载器.你看加壳后,系统是先执行壳代码的.但我们想要的是执行原dex,可是系统此时是不会自动来执行的需要壳去将原dex加载到系统中.ok,壳就说到这里,看android apk壳: Android APK加壳技术方案[1] Android APK加壳技术方案[2] APK加壳[1]初步方案实现详解

360急速浏览器不自动升级的方法

最开始的时候 chrome打印 有一个简化网页的功能 能够仅打印核心数据出来 比较好用 但是随着自动升级 发现这个功能没有了 简单查了下 发现chrome 52 的版本还带着 简化的功能 于是本来想办法下载的 但是发现比较麻烦 又想到了360急速浏览器的chrome的版本 也支持 就是用使用了较低版本的 360急速浏览器. 然后 又百度了下 如何 避免自动升级的办法. 先试试.https://zhidao.baidu.com/question/1372148205324994099.html 3