从我自己的应用中读取另一个应用的.apk

时间:2016-02-24 13:23:57

标签: android apk

有没有办法从我自己的应用程序扫描其他应用程序的.apk文件而无需root访问权限?应该有,因为有APK Extractor之类的应用程序可以让你获得任何已安装应用程序的.apk。最好的事情是,APK Extractor不需要root访问权限。

我尝试使用ProcessBuilder并调用命令pm list packages来获取已安装的软件包,然后我运行pm path com.package.name以获取每个.apk的路径。我得到了有效的路径但是当我尝试使用File apkFile = new File(apkPath);打开它时,我得到了

java.io.FileNotFoundException: /data/app/some.app.package/base.apk
open failed: ENOENT (No such file or directory)

这基本上意味着我没有权利阅读该文件。

2 个答案:

答案 0 :(得分:1)

我在另一个问题here is direct link to answer in another thread找到了解决方案。

我也在这里为懒人复制了答案。

  
      
  1. 首先,您将获得所有已安装的应用程序
  2.   
  3. 对于每一个,获取公共源目录。
  4.   
  5. 将文件复制到SD卡。
  6.         

    注意:无需扎根。

         

    这是snippt代码:

    final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    final List pkgAppsList = getPackageManager().queryIntentActivities(mainIntent, 0);
    for (Object object : pkgAppsList) {
        ResolveInfo info = (ResolveInfo) object;
        File file = new File(info.activityInfo.applicationInfo.publicSourceDir);
        // Copy the .apk file to wherever
    }
    

答案 1 :(得分:0)

如果您想要访问此APK,则需要SU访问权限。阅读更多here。 如果只是使用普通手机,Android OS会因为安全原因不允许您访问其他APK。此外,你确定用户实际上已经在手机上安装了其他APK吗?