批量获取与apk文件相对应的包名

本文记录如何利用aapt命令批量获取与apk文件相对应的包名。

1. 配置aapt环境变量,aapt.exe存在于SDK–build-tools目录中。

在这里插入图片描述

2. 编写批处理bat脚本getPackageName.bat,获取某一文件夹内所有apk的包名,输出至E:\软件样本库\apkpackagename.txt。

getPackageName.bat内容如下(注两个连续冒号后为注释):

@echo off
::%cd%表示当前目录,ApkPath为apk所在目录
set ApkPath=%cd%\benign
::进入apk所在目录
cd %ApkPath%
::获取apk包名并输出至 E:\软件样本库\apkpackagename.txt(目录自定)
for %%i in (*.apk) do (
      echo 正在获取: %%i
      :: >nul 表示屏蔽操作成功的显示信息,但是显示操作失败的信息
      echo "%%i" > nul >> E:\软件样本库\apkpackagename.txt
      aapt dump badging "%%i" | findstr "package:" >nul>>E:\软件样本库\apkpackagename.txt
)
pause

3. 将apk文件名与其包名相对应

写了一个java输入输出程序,完成这一功能。
通过上一步获取的apkpackagename.txt部分截图如下
在这里插入图片描述
从图中可以看出,apk文件名被双引号""引起,包名则被单引号’'引起。若以"作为分隔符分割每一行得到字符串数组,*.apk文件名为字符串数组中的第二个元素。以’作为分隔符分割,包名为字符串数组中的第二个元素。

代码如下:

package test2;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.BufferedWriter;
public class GetPackageName {
    public static void main(String[] args) throws Exception {
        //指定读取目录
  	File file = new File("E:/FinalDesign/DataProcessing/GetData/apkpackagename.txt");
	//制定输出目录
  	File ofile = new File("E:/FinalDesign/DataProcessing/GetData/onlypackagename.txt");
 	//输入流
 	FileInputStream fis = new FileInputStream(file);
 	//输出流
	FileOutputStream fos = new FileOutputStream(ofile);
 	//将输入字节流转换为字符流
 	InputStreamReader isr = new InputStreamReader(fis);
	//将输出字节流转为字符流
 	OutputStreamWriter osw = new OutputStreamWriter(fos);
 	//提供缓冲功能,加快读取效率
 	BufferedReader buffr = new BufferedReader(isr);
 	BufferedWriter buffw = new BufferedWriter(osw);
	String nextline = null;
 	//int num = 0;
	//System.out.println(nextline);
  	while((nextline= buffr.readLine()) != null) {
 	    //System.out.println(nextline);
 	    //以'作为分隔符将每一行分割得到第二个字符串
  	    String[] splitstr1 = nextline.split("\'");
  	    //以"作为分隔符将每一行分割得到第二个字符串
 	    String[] splitstr2 = nextline.split("\"");
   	    //System.out.println(splitstr2[0]); 
   	    if(splitstr2.length > 1) {
   		 buffw.write(splitstr2[1]);
  	    }
 	    if(splitstr1.length > 1) {

    	         buffw.write("    "+splitstr1[1]);
   		 //num ++;
    		 buffw.newLine();
  	     }
 	    else
    		continue;
        }
  	    buffr.close();
            buffw.close();
  	   //System.out.println(num);
  
     }
}

运行程序后得到的txt文件截图
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41055558/article/details/87905400