android apk包解压缩,Android 解压APK文件

最近一个项目里需要得到Android已安装程序的签名文件(CERT.RSA)的SHA1值,所以就调研解压APK文件。

通过包名来得到已安装程序在系统的安装包路径。

private static String getApkPath(String pkgName) {

PackageManager pm = mContext.getPackageManager();

ApplicationInfo pi = null;

try {

pi = pm.getApplicationInfo(pkgName,PackageManager.GET_UNINSTALLED_PACKAGES);

if(pi != null)

return pi.sourceDir;

else

return null;

} catch (NameNotFoundException e) {

e.printStackTrace();

return null;

}

}

解压对应的APK包,得到需要的文件(.RSA)

public static void UnZip(String unzipfile){

try {

File zipFile = new File(unzipfile); //解压缩的文件路径(为了获取路径)

if(!zipFile.exists())

{

Log.i(TAG,"FILE !EXIST");

return ;

}

ZipInputStream zin = new ZipInputStream(new FileInputStream(zipFile));

ZipEntry entry;

while ( (entry = zin.getNextEntry()) != null){

if (!entry.isDirectory()) { //匹配文件,跳过文件夹

String filePath = entry.getName();

Pattern p = Pattern.compile(".*(RSA|DSA|rsa)$"); //匹配RSA后缀的文件

Matcher m = p.matcher(filePath);

if(m.matches())

{

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int count;

while ((count = zin.read(buffer)) != -1) {

baos.write(buffer, 0, count);

}

try {

String sha1 = Sha1.getSha1(baos);

Log.i(TAG, "Sha1:"+sha1+"");

} catch (Exception e) {

e.printStackTrace();

}

}

}

}//while

zin.closeEntry();

}//try

catch (IOException e) {

e.printStackTrace();

}

}

主要就是通过ZipInputStream来读取对应文件,然后将该文件写到SD卡上,然后调用sha1方法读取该文件得到sha1值。

ZipInputStream类,比较重要,值得学习一下。

SDK里:

51511220_1.png

总结:ZipInputStream是InputStream的子类,通过此类可以方便地读取ZIP格式的压缩文件。

通过ZipInputStream类中的getNextEntry()方法可以依次取得每一个ZipEntry,那么将此类与ZipFile结合就可以对压缩的文件夹进行解压缩操作。但是需要注意的是,在mldndir.zip文件中本身是包含压缩的文件夹的,所以在进行解压缩前,应该先根据ZIP文件中的文件夹的名称在硬盘上创建好一个对应的文件夹,然后才能把文件解压缩进去,而且在操作时对于每一个解压缩的文件都必须先创建(File类的createNewFile()方法可以创建新文件)后再将内容输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值