update升级包版本信息的读取

android设备在用U盘升级的时候,要先判断U盘中的升级包是否匹配此机型,是否高于当前版本。如果这些都成立的话,那么才刷机。这里我列出一个读取U盘版本信息的例子,只要运用了ZipInputStream  ZipEntry 。 

  public String getUdiskVersion() {

  1. Log.e(TAG, "--> getUdiskVersion()");  
  2. String zipFile = "mnt/udisk/usb/USB_DISK0/udisk0/update.zip";  
  3. File f = new File(zipFile) ;  
  4. if(!f.exists()){  
  5.     return "" ;  
  6. }  
  7. FileInputStream fis = null;  
  8. try {  
  9.     fis = new FileInputStream(f);  
  10. catch (FileNotFoundException e1) {  
  11.     // TODO Auto-generated catch block  
  12.     e1.printStackTrace();  
  13. }  
  14. BufferedReader reader = null;  
  15. String str = "";  
  16. String version = "";  
  17. ZipEntry ze = null;  
  18. ZipInputStream zis = null;  
  19.   
  20. try {  
  21.     zis = new ZipInputStream(fis);  
  22.     while ((ze = zis.getNextEntry()) != null) {  
  23.         if (ze.getName().equals("system/build.prop")) {  
  24.             Log.e(TAG, "找到了" + "路径是:" + ze.getName());  
  25.             break;  
  26.         }  
  27.     }  
  28.       
  29.     reader = new BufferedReader(new InputStreamReader(zis, "GBK"));  
  30.     while ((str = reader.readLine()) != null) {  
  31.         if (str.startsWith("ro.product.model")) {  
  32.             version = str.substring(str.indexOf('=') + 1);  
  33.             Toast.makeText(this, version, 0);  
  34.             Log.e(TAG, "--> str = " + str);  
  35.         }  
  36.     }  
  37. catch (IOException e) {  
  38.     e.printStackTrace();  
  39. finally {  
  40.     try {  
  41.         reader.close();  
  42.         ze.clone();  
  43.         zis.close();  
  44.         fis.close();  
  45.     } catch (IOException e) {  
  46.         e.printStackTrace();  
  47.     }  
  48. }  
  49. return version;  

转载自:http://www.verydemo.com/demo_c89_i41744.html
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在安卓4.4.3系统中,利用recovery对update.zip升级进行RSA加密及解密,可以按照以下步骤进行: 1. 首先,需要生成RSA密钥对,可以使用openssl工具,在终端输入以下命令: ``` openssl genrsa -out private.pem 2048 openssl rsa -in private.pem -pubout -out public.pem ``` 其中,private.pem是私钥文件名,public.pem是公钥文件名,2048是密钥长度。 2. 将生成的公钥文件public.pem放到安卓系统的/recovery目录下。 3. 在recovery中,找到文件recovery.fstab,修改其中的一行: ``` /external_sd vfat /dev/block/mmcblk1p1 /mnt/external_sd ``` 改为: ``` /external_sd vfat /dev/block/mmcblk1p1 /mnt/external_sd flags=backup=1,encryptable=footer ``` 其中,flags=backup=1表示启用备份功能,encryptable=footer表示启用RSA加密功能。 4. 在recovery中,找到文件recovery.cpp,修改其中的函数: ``` static int write_update_forced(const char *path, const char *buffer, size_t size) ``` 在函数中添加以下代码: ``` if (strstr(path, "update.zip")) { FILE *f = fopen("/recovery/public.pem", "r"); RSA *rsa = PEM_read_RSA_PUBKEY(f, NULL, NULL, NULL); unsigned char signature[256]; unsigned int signature_len; SHA256_CTX sha_ctx; SHA256_Init(&sha_ctx); SHA256_Update(&sha_ctx, buffer, size); SHA256_Final(signature, &sha_ctx); RSA_sign(NID_sha256, signature, sizeof(signature), signature, &signature_len, rsa); fclose(f); memcpy(buffer + size, signature, signature_len); size += signature_len; } ``` 其中,首先读取公钥文件,然后计算update.zip的SHA256哈希值,使用RSA私钥对哈希值进行签名,将签名结果添加到update.zip的末尾。 5. 修改完毕后,编译并刷入recovery即可。 以上是在安卓4.4.3系统中利用recovery对update.zip升级进行RSA加密及解密的步骤,需要注意的是,修改recovery可能会导致系统无法启动或出现其他问题,请谨慎操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值