Administrator 3 днів тому
батько
коміт
3a481fb790

+ 198 - 13
src/main/kotlin/cn/qqck/kotlin/tools/Android.kt

@@ -17,7 +17,7 @@ object Android {
         /**
          * 主板、cpu代号?
          * - ro.product.board
-         * - Xiaomi
+         * - kalama
          */
         val board: String,
         /**
@@ -81,29 +81,214 @@ object Android {
     )
 
     private val array = arrayOf(
+        // Info(
+        //     "cmi", "Xiaomi", "lahaina", "M2001J1E", "cmi", "Xiaomi", "qcom", "10", "29",
+        //     "Qualcomm", "Adreno (TM) 650", 8, "Linux aarch64",
+        // ),
+        // Info(
+        //     "cmi", "Xiaomi", "lahaina", "M2001J1E", "cmi", "Xiaomi", "qcom", "10", "29",
+        //     "Qualcomm", "Adreno (TM) 650", 12, "Linux aarch64",
+        // ),
+        // Info(
+        //     "nuwa", "Xiaomi", "kalama", "2210132C", "nuwa", "Xiaomi", "qcom", "13", "33",
+        //     "Qualcomm", "Adreno (TM) 740", 8, "Linux aarch64",
+        // ),
+        // Info(
+        //     "nuwa", "Xiaomi", "kalama", "2210132C", "nuwa", "Xiaomi", "qcom", "13", "33",
+        //     "Qualcomm", "Adreno (TM) 740", 12, "Linux aarch64",
+        // ),
+        // Info(
+        //     "shennong", "Xiaomi", "kalama", "23116PN5BC", "shennong", "Xiaomi", "qcom", "13", "33",
+        //     "Qualcomm", "Adreno (TM) 750", 12, "Linux aarch64",
+        // ),
+        // Info(
+        //     "shennong", "Xiaomi", "kalama", "23116PN5BC", "shennong", "Xiaomi", "qcom", "13", "33",
+        //     "Qualcomm", "Adreno (TM) 750", 16, "Linux aarch64",
+        // ),
+        // Info(
+        //     "dm3q", "Samsung", "kalama", "SM-S9180", "dm3q", "Samsung", "qcom", "13", "33",
+        //     "Qualcomm", "Adreno (TM) 750", 16, "Linux aarch64",
+        // ),
+        // Samsung
+        Info(
+            "SM-S901U", "Samsung", "exynos2100", "SM-S901U", "galaxyS22", "Samsung", "samsung", "12", "32",
+            "Samsung", "ARM Mali-G78 MP14", 8, "Linux aarch64"
+        ),
+        Info(
+            "SM-S908U", "Samsung", "snapdragon8Gen1", "SM-S908U", "galaxyS22Ultra", "Samsung", "qcom", "12", "32",
+            "Qualcomm", "Adreno (TM) 730", 12, "Linux aarch64"
+        ),
+        // OnePlus
+        Info(
+            "NE2211", "OnePlus", "snapdragon8Gen1", "NE2211", "oneplus10Pro", "OnePlus", "qcom", "12", "32",
+            "Qualcomm", "Adreno (TM) 730", 12, "Linux aarch64"
+        ),
+        Info(
+            "PHP110", "OnePlus", "snapdragon8Gen2", "PHP110", "oneplus11", "OnePlus", "qcom", "13", "33",
+            "Qualcomm", "Adreno (TM) 740", 16, "Linux aarch64"
+        ),
+
+        // Google Pixel
+        Info(
+            "Pixel 6", "Google", "gs101", "GF5KQW", "oriole", "Google", "google", "12", "32",
+            "Google", "Mali-G78 MP20", 8, "Linux aarch64"
+        ),
+        Info(
+            "Pixel 7 Pro", "Google", "gs201", "GVU6C", "cheetah", "Google", "google", "13", "33",
+            "Google", "Mali-G710 MC10", 12, "Linux aarch64"
+        ),
+        // Oppo
+        Info(
+            "PEEM00", "Oppo", "snapdragon888", "PEEM00", "findX3Pro", "Oppo", "qcom", "11", "30",
+            "Qualcomm", "Adreno (TM) 660", 12, "Linux aarch64"
+        ),
+        Info(
+            "PGEM10", "Oppo", "dimensity9000", "PGEM10", "findX5Pro", "Oppo", "mtk", "12", "32",
+            "MediaTek", "Mali-G710 MC10", 12, "Linux aarch64"
+        ),
+
+        // Vivo
         Info(
-            "cmi", "Xiaomi", "lahaina", "M2001J1E", "cmi", "Xiaomi", "qcom", "10", "29",
-            "Qualcomm", "Adreno (TM) 650", 8, "Linux aarch64",
+            "V2145A", "Vivo", "snapdragon8Gen1", "V2145A", "vivoX80Pro", "Vivo", "qcom", "12", "32",
+            "Qualcomm", "Adreno (TM) 730", 12, "Linux aarch64"
         ),
         Info(
-            "cmi", "Xiaomi", "lahaina", "M2001J1E", "cmi", "Xiaomi", "qcom", "10", "29",
-            "Qualcomm", "Adreno (TM) 650", 12, "Linux aarch64",
+            "V2254A", "Vivo", "snapdragon8Gen2", "V2254A", "vivoX90Pro+", "Vivo", "qcom", "13", "33",
+            "Qualcomm", "Adreno (TM) 740", 12, "Linux aarch64"
         ),
+        // Realme
         Info(
-            "nuwa", "Xiaomi", "kalama", "2210132C", "nuwa", "Xiaomi", "qcom", "13", "33",
-            "Qualcomm", "Adreno (TM) 740", 8, "Linux aarch64",
+            "RMX3301", "Realme", "snapdragon8Gen1", "RMX3301", "realmeGT2Pro", "Realme", "qcom", "12", "32",
+            "Qualcomm", "Adreno (TM) 730", 12, "Linux aarch64"
         ),
         Info(
-            "nuwa", "Xiaomi", "kalama", "2210132C", "nuwa", "Xiaomi", "qcom", "13", "33",
-            "Qualcomm", "Adreno (TM) 740", 12, "Linux aarch64",
+            "RMX3740", "Realme", "dimensity8100", "RMX3740", "realmeGTNeo3", "Realme", "mtk", "12", "32",
+            "MediaTek", "Mali-G610 MC6", 8, "Linux aarch64"
         ),
+        // Honor (荣耀)
+        Info(
+            "ANA-AN00", "Honor", "kirin9000", "ANA-AN00", "honorMagic3Pro", "Honor", "kirin", "11", "30",
+            "HiSilicon", "Mali-G78 MP24", 8, "Linux aarch64"
+        ),
+        Info(
+            "PCT-AL10", "Honor", "snapdragon8Gen1", "PCT-AL10", "honorMagic4Pro", "Honor", "qcom", "12", "32",
+            "Qualcomm", "Adreno (TM) 730", 12, "Linux aarch64"
+        ),
+        // RedMagic (红魔)
+        Info(
+            "NX669J", "RedMagic", "snapdragon888", "NX669J", "redMagic6Pro", "RedMagic", "qcom", "11", "30",
+            "Qualcomm", "Adreno (TM) 660", 16, "Linux aarch64"
+        ),
+        Info(
+            "NX709S", "RedMagic", "snapdragon8Gen2", "NX709S", "redMagic8Pro", "RedMagic", "qcom", "13", "33",
+            "Qualcomm", "Adreno (TM) 740", 16, "Linux aarch64"
+        ),
+        // Meizu (魅族)
+        Info(
+            "M181Q", "Meizu", "snapdragon845", "M181Q", "meizu16th", "Meizu", "qcom", "9", "28",
+            "Qualcomm", "Adreno (TM) 630", 8, "Linux aarch64"
+        ),
+        Info(
+            "M2396", "Meizu", "snapdragon8Gen2", "M2396", "meizu20pro", "Meizu", "qcom", "13", "33",
+            "Qualcomm", "Adreno (TM) 740", 12, "Linux aarch64"
+        ),
+        // ZTE (中兴)
+        Info(
+            "ZTE A2022P", "ZTE", "snapdragon888", "ZTE A2022P", "axon30Ultra", "ZTE", "qcom", "11", "30",
+            "Qualcomm", "Adreno (TM) 660", 12, "Linux aarch64"
+        ),
+        Info(
+            "ZTE A2024", "ZTE", "snapdragon8Gen2", "ZTE A2024", "axon40 Ultra", "ZTE", "qcom", "13", "33",
+            "Qualcomm", "Adreno (TM) 740", 12, "Linux aarch64"
+        ),
+        // Lenovo (联想)
+        Info(
+            "Lenovo Legion", "Lenovo", "snapdragon888", "L70081", "legionPhoneDuel2", "Lenovo", "qcom", "12", "32",
+            "Qualcomm", "Adreno (TM) 660", 16, "Linux aarch64"
+        ),
+        Info(
+            "Lenovo Legion", "Lenovo", "snapdragon8Gen1", "L71061", "legionY90", "Lenovo", "qcom", "12", "32",
+            "Qualcomm", "Adreno (TM) 730", 18, "Linux aarch64"
+        ),
+
+        // IQOO (Vivo旗下子品牌)
+        Info(
+            "V2149A", "IQOO", "snapdragon8Gen1", "V2149A", "iqoo9Pro", "IQOO", "qcom", "12", "32",
+            "Qualcomm", "Adreno (TM) 730", 12, "Linux aarch64"
+        ),
+        Info(
+            "V2237A", "IQOO", "snapdragon8Gen2", "V2237A", "iqoo11Pro", "IQOO", "qcom", "13", "33",
+            "Qualcomm", "Adreno (TM) 740", 16, "Linux aarch64"
+        ),
+
+        // Black Shark (黑鲨,游戏手机)
+        Info(
+            "KALE-A0", "Black Shark", "snapdragon888", "KALE-A0", "blackShark4", "Black Shark", "qcom", "11", "30",
+            "Qualcomm", "Adreno (TM) 660", 12, "Linux aarch64"
+        ),
+        Info(
+            "SHARK-PRC", "Black Shark", "snapdragon8Gen2", "SHARK-PRC", "blackShark5Pro", "Black Shark", "qcom", "13", "33",
+            "Qualcomm", "Adreno (TM) 740", 16, "Linux aarch64"
+        ),
+
+        // Nubia (努比亚,游戏与拍摄手机并重)
+        Info(
+            "NX703J", "Nubia", "snapdragon8Gen1", "NX703J", "nubiaZ40Pro", "Nubia", "qcom", "12", "32",
+            "Qualcomm", "Adreno (TM) 730", 12, "Linux aarch64"
+        ),
+        Info(
+            "NX711J", "Nubia", "snapdragon8Gen2", "NX711J", "nubiaZ50Ultra", "Nubia", "qcom", "13", "33",
+            "Qualcomm", "Adreno (TM) 740", 16, "Linux aarch64"
+        ),
+
+        // Coolpad (酷派)
+        Info(
+            "CP07", "Coolpad", "qualcommMSM8953", "CP07", "coolpadCool6", "Coolpad", "qcom", "10", "29",
+            "Qualcomm", "Adreno (TM) 506", 4, "Linux aarch64"
+        ),
+        Info(
+            "CP19", "Coolpad", "dimensity1200", "CP19", "coolpadCool20Pro", "Coolpad", "mtk", "12", "32",
+            "MediaTek", "Mali-G77 MC9", 8, "Linux aarch64"
+        ),
+
+        // ASUS (华硕,常见于游戏手机的市场)
+        Info(
+            "ASUS_I005DA", "ASUS", "snapdragon888", "I005DA", "rogPhone5", "ASUS", "qcom", "11", "30",
+            "Qualcomm", "Adreno (TM) 660", 16, "Linux aarch64"
+        ),
+        Info(
+            "AI2201", "ASUS", "snapdragon8Gen2", "AI2201", "rogPhone7Ultimate", "ASUS", "qcom", "13", "33",
+            "Qualcomm", "Adreno (TM) 740", 18, "Linux aarch64"
+        ),
+
+        // OnePlus 的特殊型号
+        Info(
+            "IN2020", "OnePlus", "snapdragon865", "IN2020", "oneplus8Pro", "OnePlus", "qcom", "11", "30",
+            "Qualcomm", "Adreno (TM) 650", 12, "Linux aarch64"
+        ),
+        Info(
+            "CPH2451", "OnePlus", "snapdragon8Gen2", "CPH2451", "oneplusAcePro", "OnePlus", "qcom", "13", "33",
+            "Qualcomm", "Adreno (TM) 740", 16, "Linux aarch64"
+        ),
+
+        // 荣耀 (新增光荣机型)
+        Info(
+            "FNE-AN00", "Honor", "kirin810", "FNE-AN00", "honor9X", "Honor", "kirin", "10", "29",
+            "HiSilicon", "Mali-G52", 6, "Linux aarch64"
+        ),
+        Info(
+            "LGE-AN10", "Honor", "dimensity8050", "LGE-AN10", "honor90Lite", "Honor", "mtk", "13", "33",
+            "MediaTek", "Mali-G77 MC9", 12, "Linux aarch64"
+        ),
+
+        // 红米 (Redmi,低价高性能机型)
         Info(
-            "shennong", "Xiaomi", "kalama", "23116PN5BC", "shennong", "Xiaomi", "qcom", "13", "33",
-            "Qualcomm", "Adreno (TM) 750", 12, "Linux aarch64",
+            "21061119AG", "Redmi", "dimensity1200", "21061119AG", "redmiK40Gaming", "Redmi", "mtk", "11", "30",
+            "MediaTek", "Mali-G77 MC9", 12, "Linux aarch64"
         ),
         Info(
-            "shennong", "Xiaomi", "kalama", "23116PN5BC", "shennong", "Xiaomi", "qcom", "13", "33",
-            "Qualcomm", "Adreno (TM) 750", 16, "Linux aarch64",
+            "23049RA19C", "Redmi", "dimensity9200", "23049RA19C", "redmiK60Ultra", "Redmi", "mtk", "13", "33",
+            "MediaTek", "Immortalis-G715", 16, "Linux aarch64"
         ),
     )
 

+ 104 - 2
src/main/kotlin/cn/qqck/kotlin/tools/Pack.kt

@@ -134,6 +134,20 @@ class Pack(size: Int = 32) {
         return this
     }
 
+    /**
+     * 将一个或多个字节值添加到缓冲区中。
+     *
+     * @param vals 要添加的字节值,可变参数。
+     * @return 返回当前对象以支持链式调用。
+     */
+    @OptIn(ExperimentalUnsignedTypes::class)
+    fun push_ubyte(vararg vals: UByte): Pack {
+        this.grow(vals.size)
+        System.arraycopy(vals, 0, this.buf, this.buf_size, vals.size)
+        this.buf_size += vals.size
+        return this
+    }
+
     /**
      * 将多个Short值推入缓冲区,并根据指定的字节序进行写入操作。
      *
@@ -157,6 +171,57 @@ class Pack(size: Int = 32) {
         return this
     }
 
+    /**
+     * 将多个Short值推入缓冲区,并根据指定的字节序进行写入操作。
+     *
+     * @param vals 需要推入的Short值,可变参数形式。
+     * @param big 指定字节序,true表示大端字节序,false表示小端字节序,默认为false。
+     * @return 当前对象实例,便于链式调用。
+     */
+    @OptIn(ExperimentalUnsignedTypes::class)
+    fun push_ushort(vararg vals: UShort, big: Boolean = false): Pack {
+        this.grow(vals.size * 2)
+        if (big) {
+            for (j_i in vals.indices) {
+                this.buf[this.buf_size++] = (vals[j_i].toInt() shr 8).toByte()
+                this.buf[this.buf_size++] = vals[j_i].toByte()
+            }
+        } else {
+            for (j_i in vals.indices) {
+                this.buf[this.buf_size++] = vals[j_i].toByte()
+                this.buf[this.buf_size++] = (vals[j_i].toInt() shr 8).toByte()
+            }
+        }
+        return this
+    }
+
+    /**
+     * 将多个整数值按照指定字节顺序写入缓冲区,并返回当前对象。
+     *
+     * @param vals 要写入的整数值,可变参数。
+     * @param big 是否采用大端字节序。如果为 true,则使用大端字节序;否则使用小端字节序。默认为 false。
+     * @return 当前对象,用于支持链式调用。
+     */
+    fun push_int(vararg vals: Int, big: Boolean = false): Pack {
+        this.grow(vals.size * 4)
+        if (big) {
+            for (j_i in vals.indices) {
+                this.buf[this.buf_size++] = (vals[j_i] shr 24).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 16).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 8).toByte()
+                this.buf[this.buf_size++] = vals[j_i].toByte()
+            }
+        } else {
+            for (j_i in vals.indices) {
+                this.buf[this.buf_size++] = vals[j_i].toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 8).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 16).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 24).toByte()
+            }
+        }
+        return this
+    }
+
     /**
      * 将多个整数值按照指定字节顺序写入缓冲区,并返回当前对象。
      *
@@ -164,7 +229,8 @@ class Pack(size: Int = 32) {
      * @param big 是否采用大端字节序。如果为 true,则使用大端字节序;否则使用小端字节序。默认为 false。
      * @return 当前对象,用于支持链式调用。
      */
-    fun push(vararg vals: Int, big: Boolean = false): Pack {
+    @OptIn(ExperimentalUnsignedTypes::class)
+    fun push_uint(vararg vals: UInt, big: Boolean = false): Pack {
         this.grow(vals.size * 4)
         if (big) {
             for (j_i in vals.indices) {
@@ -191,7 +257,43 @@ class Pack(size: Int = 32) {
      * @param big 是否以大端模式写入,如果为`true`按大端顺序写入,否则按小端顺序写入,默认值为`false`(小端模式)。
      * @return 返回当前对象,支持链式调用。
      */
-    fun push(vararg vals: Long, big: Boolean = false): Pack {
+    fun push_long(vararg vals: Long, big: Boolean = false): Pack {
+        this.grow(vals.size * 8)
+        if (big) {
+            for (j_i in vals.indices) {
+                this.buf[this.buf_size++] = (vals[j_i] shr 56).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 48).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 40).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 32).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 24).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 16).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 8).toByte()
+                this.buf[this.buf_size++] = vals[j_i].toByte()
+            }
+        } else {
+            for (j_i in vals.indices) {
+                this.buf[this.buf_size++] = vals[j_i].toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 8).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 16).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 24).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 32).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 40).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 48).toByte()
+                this.buf[this.buf_size++] = (vals[j_i] shr 56).toByte()
+            }
+        }
+        return this
+    }
+
+    /**
+     * 将一个或多个长整型值写入缓冲区,并根据指定模式(big/little-endian)调节写入顺序。
+     *
+     * @param vals 多个需要写入的长整型值。
+     * @param big 是否以大端模式写入,如果为`true`按大端顺序写入,否则按小端顺序写入,默认值为`false`(小端模式)。
+     * @return 返回当前对象,支持链式调用。
+     */
+    @OptIn(ExperimentalUnsignedTypes::class)
+    fun push_ulong(vararg vals: ULong, big: Boolean = false): Pack {
         this.grow(vals.size * 8)
         if (big) {
             for (j_i in vals.indices) {

+ 5 - 13
src/test/kotlin/Main.kt

@@ -1,21 +1,13 @@
-import cn.qqck.kotlin.tools.*
-import okhttp3.MediaType.Companion.toMediaType
-import okhttp3.RequestBody.Companion.toRequestBody
+import cn.qqck.kotlin.tools.fget
+import cn.qqck.kotlin.tools.fset
+import cn.qqck.kotlin.tools.json
+import cn.qqck.kotlin.tools.string
 import java.io.File
 
 fun main() {
     // 机型对比()
     // ggcz_用户()
-    runDefer {
-        defer { println(1) }
-        defer { println(2) }
-        defer { println(3) }
-    }
-    val j_url = "http://www.baidu.com"
-    val j_post = "id=aaaaaaaaaaaaa".toRequestBody("application/x-www-form-urlencoded".toMediaType())
-    Okhttp.call(j_url) { it.post(j_post) }
-    Okhttp.call(j_url) { it.post(j_post) }
-    Okhttp.call(j_url) { it.post(j_post) }
+    println((System.currentTimeMillis() / 1000L).toInt())
 }
 
 fun ggcz_用户() {