首页 > 代码库 > cocos2dx程序android平台下自更新策略

cocos2dx程序android平台下自更新策略

    cocos2dx开发的在android平台下运行的程序,是以一个.so用户库文件提供给JAVA层调用。所以我们在JAVA层实现检查更新,下载最新库文件,并跳过加载原来库文件,加载新库文件即可。

    1. 首先,在AndroidManifest.xml里新增一个activity,以供执行更新。

 <!-- 插入一个执行下载更新的activity -->
		<activity android:name="com.guo.UpdateActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="landscape"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:configChanges="orientation">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

  2.  更新的流程主要是:版本检查-->下载更新->加载新.so文件。

        a. 版本检查:在版本放出去的时候本地加入一个更新配置文件。如:

<?xml version="1.0" encoding="utf-8"?>
<update>
<!--是否开放此功能,1:是,其他:否-->
<enable>1</enable>
<!--当前版本-->
<version>1.0.0.1</version>    
<!--版本检查URL-->
<versionCheckUrl>http://xxxxxx/update.plist</versionCheckUrl>
</update>

        通过配置的检查地址 http://xxxxxx/update.plist,去获取服务器最新的版本号 。 update.plist如下:

<?xml version="1.0" encoding="utf-8"?>
<update>
<!--是否开放此功能,1:是,其他:否-->
<enable>1</enable>
<!--服务器最新版本-->
<version>1.0.0.2</version>    
<!--文件下载地址: URL + 版本号 + "/" + CPU_ABI + "/" + XXX.so , 这里只配置前面部分-->
<downloadUrl>http://192.168.30.124/test/</downloadUrl>
<!--文件MD5值,为下载校验用-->
<md5>000000000000000000000</md5>
</update>

       b.下载更新: 如果有更新根据规则,选择适合自己CPU架构的库文件下载。下载完成之后进行完整性校验。

3. 加载.so文件

    修改原来的Cocos2dxActivity.java文件,加入跳过加载原来库文件逻辑。

public final static String FLAG_SKIP_LOAD_LIB = "key-isSkipLoadLib";

protected void onCreate(final Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	    
		Boolean isSkipLoadLib = false;
		if(savedInstanceState != null)
			isSkipLoadLib = savedInstanceState.getBoolean(FLAG_SKIP_LOAD_LIB);
	    if(!isSkipLoadLib)
			onLoadNativeLibraries();

		sContext = this;
    	this.mHandler = new Cocos2dxHandler(this);
    	
    	Cocos2dxHelper.init(this);
    	
    	this.init();
    	if (mVideoHelper == null) {
    		mVideoHelper = new Cocos2dxVideoHelper(this, mFrameLayout);
		}
	}

4. 代码太多,直接上链接:源码

5. 还差ZIP压缩下载和MD5校验。

cocos2dx程序android平台下自更新策略