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