WISE-PaaS/OTA Agent(Android)

From ESS-WIKI
Revision as of 07:54, 4 November 2016 by Jin.xin (talk | contribs)
Jump to: navigation, search

Introduction

This document demonstrates how to support our ota-agent solution under your android system.This demonstration is android 4.3 based. If you encounter problems under your some-verson android system,please mailto me: jin.xin@advantech.com.cn

Architecture

RTENOTITLE

The android ota solution is compose of two parts: the C-lanuage  based Ota-agent and the Java-language based OtaService.

  • Ota-agent achieves communiction with the ota-server, besides, it achieves the package download and unzip. But, the Ota-agent is C-language based and it can't invoke the Java-language based android OTA APIs, so the OtaService comes.
  • OtaService is on the android framework layer, so it can invoke the android OTA APIs directly. The OtaService provides as a socket server. So the Ota-agent can invoke the android OTA APIs through the socket connnect providing by OTaService indirectly.

Android OtaService

we now support four commands, you can  extent your commands.


switch(Advaction.getAdvaction(asplit[0])){	
						case systembackup:
							Slog.i(TAG, "switch systembackup");
							RecoverySystem.rebootSystemBackup(mContext);
							break;
						case wipedata:
							Slog.i(TAG, "switch wipedata");
							RecoverySystem.rebootWipeUserData(mContext);
							break;
						case wipecache:
							Slog.i(TAG, "swtich wipecache");
							RecoverySystem.rebootWipeCache(mContext);
							break;
						case install:
							Slog.i(TAG, "switch install");
							String file = asplit[1].trim();
							Slog.i(TAG, "install file: " + file);
							File recoveryFile = new File(file);
                					if(!recoveryFile.exists()){
								Slog.i(TAG, "install, file not exist");
								return;
							}
							RecoverySystem.installPackage(mContext, recoveryFile);
							break;
						default:
							Slog.i(TAG, "error paramer");
							break;		
						}
The source code is here:

Android OtaService test tools

To test the OtaService, I developed a OtaClient test tools:

void usage()
{
#define ALOGI printf
	ALOGI(LOG_TAG "not support, usage: \n");
        ALOGI(LOG_TAG "servertest [action string] [option]\n");
        ALOGI(LOG_TAG "action string can be:\n");
        ALOGI(LOG_TAG "    systembackup -- mean system backup\n");
        ALOGI(LOG_TAG "    wipedata -- mean wipe data partition\n");
        ALOGI(LOG_TAG "    wipecache -- mean wipe cache partition\n");
        ALOGI(LOG_TAG "    install /cache/update.zip -- mean update system and /cache/update.zip is the option\n");
}

int main(const int argc, const char *argv[]) {
    char buf[] = "systembackup";//for system backup
    //char buf[] = "install /cache/update.zip";
    //char buf[] = "wipecache";
    //char buf[] = "wipecache";
    int len = strlen(buf);
    static int clientfd;

    ALOGI(LOG_TAG "test recovery functions...\n");
    if(argc <= 1 && argc > 3){
        usage();
	return -1;
    }
    else if(argc == 2){
        if(strncmp(argv[1], "systembackup", strlen("systembackup")) && strncmp(argv[1], "wipedata", strlen("wipedata")) && strncmp(argv[1], "wipecache", strlen("wipecache"))){
                usage();
                return -1;
        }
    }
    else if(argc == 3){
        if(strncmp(argv[1], "install", strlen("install"))){
                usage();
                return -1;
        }
    }
    else{
	usage();
	return -1;
    }

    
    clientfd = socket_local_client("ota_server", ANDROID_SOCKET_NAMESPACE_ABSTRACT,SOCK_STREAM);
    if(clientfd < 0){
	ALOGE(LOG_TAG "Failed to connect to local socket test_server: %s\n", strerror(errno));
	exit(1);
    }
    ALOGI(LOG_TAG "test connect successful\n");
    
    sleep(1);	    
    if(argc == 2){
	writex(clientfd, argv[1], strlen(argv[1]));
    }
    else if(argc == 3){
	char astr[1024] = {0};
	int len1 = strlen(argv[1]);
	int len2 = strlen(argv[2]);
	int len3 = strlen("#");
	strncpy(astr, argv[1], len1);
	strncpy(astr+len1, "#", len3);
	strncpy(astr+len1+len3, argv[2], len2);
	writex(clientfd, astr, strlen(astr));	
    }
    else{
    	usage();
    	return -1;
    }
    return 0;
}

Android Ota-agent

The Android Ota-agent is same as the wise-pass ota-agent,The difference is that I modify the linux's Makefie to Android's Android.mk.

so although we have provided the binary file  for android, you can rebuild the ota-agent under android system too.