Android

【Android】Annotation 註解 自定義實現 MD5 功能

【Android】Annotation 註解 自定義實現 MD5 功能

Android Annotation是一種框架,用於快速構建Android應用程式。

它使用註釋來定義模型,控制器,視圖和路由,然後生成高質量的代碼以避免與特定的技術細節的重復捲積。

Android Annotation的優點在於其低耦合,有助於開發人員更快速,更有效地處理像UI控制項和數據模型等功能。它不但可以大大縮短開發時間,而且可以確保產品質量。


文章目錄

  1. 創建 Annotation
  2. 添加 MD5 工具類
  3. 創建 Annotation 實現的方法
  4. 使用 Annotation 的Model
  5. 程式碼範例
  6. 效果展示
  7. Github

1.創建 Annotation

SerializedEncryption
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FIELD)
annotation class SerializedEncryption(
    val type: String = "Base64"
)

2.添加 MD5 工具類

object MDUtil {
    fun encode(type: Type, data: String): String {
        return try {
            val digest = MessageDigest.getInstance(type.value)
            digest.update(data.toByteArray())
            //32位補0
            String.format("%032X", BigInteger(1, digest.digest()))
        } catch (e: Exception) {
            data
        }
    }

    enum class Type(val value: String) {
        MD5("MD5"), SHA256("SHA-256"), SHA512("SHA-512");
    }
}

3.創建 Annotation 實現的方法

object SerializedUtil {

    fun convertToRequestContent(model: Any?, field: Field): Array<Any>? {
        val key = field.name
        val originalValue = field[model]

        if (TextUtils.isEmpty(key) || originalValue == null) {
            return null
        }

        return if (originalValue is File) {
            arrayOf(key, originalValue)
        } else {
            var value = originalValue.toString()

            val serializedEncryption = field.getAnnotation(SerializedEncryption::class.java)
            if (null != serializedEncryption) {
                value = when (serializedEncryption.type) {
                    "MD5" -> {
                        MDUtil.encode(MDUtil.Type.MD5, value).uppercase(Locale.getDefault())
                    }
                    "SHA256" -> {
                        MDUtil.encode(MDUtil.Type.SHA256, value).uppercase(Locale.getDefault())
                    }
                    "SHA512" -> {
                        MDUtil.encode(MDUtil.Type.SHA512, value).uppercase(Locale.getDefault())
                    }
                    else -> {
                       android.util.Base64.encodeToString(value.toByteArray(), android.util.Base64.DEFAULT)
                    }
                }
            }

            arrayOf(key, value)
        }
    }
}

4.使用 Annotation 的 Model

data class Data(
    @SerializedEncryption(type = "SHA512")
    val sha512: String,
    @SerializedEncryption(type = "SHA256")
    val sha256: String,
    @SerializedEncryption(type = "MD5")
    val md5: String,
    @SerializedEncryption
    val base64: String
)

5.程式碼範例

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        val data = Data("Annotation", "Annotation", "Annotation", "Annotation")

        val fields = data.javaClass.declaredFields
        Field.setAccessible(fields, true)

        for (field in fields) {
            val result = SerializedUtil.convertToRequestContent(data, field)
            result?.apply {
                Log.e(MainActivity::class.java.simpleName, get(0).toString() + " : " + get(1).toString())
            }
        }
    }
}

6.效果展示

7.Github

【Android】Annotation 註解 自定義實現 MD5 功能 Github

發表迴響