1. 程式人生 > >AI開發實戰11-加密功能外掛的開發

AI開發實戰11-加密功能外掛的開發

20.1.1 外掛的實現

首先需要建立存放外掛原始碼的資料夾:

/appinventor/components/src/com/qz/extensions

然後建立原始碼檔案Encryption.java,其中的程式碼如下:

//外掛的包名,通常是三段式com. + 功能描述. + extension

package com.encryption.extension;

import android.content.Context;

import android.util.Log;

import com.google.appinventor.components.annotations.DesignerComponent;

import com.google.appinventor.components.annotations.SimpleFunction;

import com.google.appinventor.components.annotations.SimpleObject;

import com.google.appinventor.components.common.ComponentCategory;

import com.google.appinventor.components.runtime.*;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

@DesignerComponent(

//外掛的版本號

version = Encryption.VERSION,

//外掛的說明文字

description = "功能:資料加密 開發者:QZ",

//如果在網上有外掛的說明文字,可以在此設定網址

helpUrl = "http://www.baidu.com",

//設定元件的型別為外掛

category = ComponentCategory.EXTENSION,

//外掛是否可見,由於目前App Inventor2只能開發和使用不可見的外掛,因此這裡只能設定成true

nonVisible = true,

//外掛的圖示,在此使用App Invento2提供的圖示

iconName = "images/extension.png")

//設定讓編譯器識別到是一個可擴充套件控制元件(與前一個註解的Category不同,這一個標識是給編譯器處理可擴充套件控制元件識別的),然後將其獨立打包生成一個aix檔案

@SimpleObject(external = true)

public class Encryption extends AndroidNonvisibleComponent

implements Component {

public static final int VERSION = 1;

private ComponentContainer container;

private Context context;

private static final String LOG_TAG = "Encryption";

public Encryption(ComponentContainer container) {

super(container.$form());

this.container = container;

context = (Context) container.$context();

Log.d(LOG_TAG, "Encryption Created" );

}

//此外掛對外提供的函式

@SimpleFunction(description = "對資料進行MD5加密")

public String makeMD5Hash(String srcStr) {

    String MD5Str;

    try {

        final MessageDigest mDigest = MessageDigest.getInstance("MD5");

        mDigest.reset();

        mDigest.update(srcStr.getBytes());

        MD5Str = bytesToHexString(mDigest.digest());

    } catch (NoSuchAlgorithmException e) {

        MD5Str = String.valueOf(srcStr.hashCode());

    }

    return MD5Str;

}

private String bytesToHexString(byte[] bytes) {

    StringBuilder sb = new StringBuilder();

    for (byte value : bytes) {

        String hex = Integer.toHexString(0xFF & value);

        if (hex.length() == 1) {

            sb.append('0');

        }

        sb.append(hex);

    }

    return sb.toString();

}

}

20.1.2 外掛的編譯

appinventor目錄下執行"ant extensions"命令即可生成相應的外掛:com.encryption.extension.aix,生成的檔案存放路徑如下:

appinventor-sources/appinventor/components/build/extensions/com.encryption.extension.aix