【问题标题】:Is my app in /system?我的应用程序在 /system 中吗?
【发布时间】:2010-02-12 18:12:27
【问题描述】:

我的应用程序可以在android上安装和运行,
在两个不同的地方:

"/data/MyApplication"  

和

"/system/MyApplication".

我需要知道我的应用程序现在安装在哪里,
如果它在“/data/”中,或者如果它在“/system”中。

有人可以帮忙吗?

非常感谢

【问题讨论】:

    标签: android system


    【解决方案1】:

    获取您的应用程序的安装位置

    getPackageManager().getApplicationInfo(getPackageName(), 0).sourceDir
    

    但是,这对您的应用程序应该不重要。 为什么需要它?

    【讨论】:

    • 我需要知道我的应用安装在哪里。是的,它将作为系统应用程序安装,但也作为 OTA 安装,我需要知道它在哪里。谢谢:)
    【解决方案2】:

    请不要对目录路径进行硬编码检查。

    您可以通过 ApplicationInfo.FLAG_SYSTEM 找出您的应用是内置系统映像的一部分。但正如另一张海报所说,应该没有什么理由需要这样做......并且请注意,如果您的应用程序的较新版本是从市场安装在捆绑了它的设备上,则仍然会设置 FLAG_SYSTEM 因为它是仍然是一个系统应用。

    【讨论】:

      【解决方案3】:

      您可以使用 adb 来查找:

      $ adb shell ls /data

      或

      $ adb shell ls /system

      或者您是否希望在运行时从您的应用程序中进行此项检查。在这种情况下,您可以使用

      System.getProperty("user.dir")

      在您的 Java 代码中。

      【讨论】:

      • 我真的需要在运行时知道这一点
      • 好的,将其添加到我的答案中。希望这会有所帮助。
      • 使用“System.getProperty("user.dir")”我只得到这个:“/”。 ;-(
      • 嗯,可能是错误的属性。谷歌的 getProperty 和 Android 可能会给你答案。我自己也会检查一下。
      【解决方案4】:

      请使用以下硬代码在 /data 或 /system 中找到用户安装的应用程序路径的位置:

      PackageInfo paramPackageInfo = null;
              try {
                  paramPackageInfo = getPackageManager().getPackageInfo(
                          getPackageName(), 0);
              } catch (NameNotFoundException e) {
                  e.printStackTrace();
              }
      
      ApplicationInfo localApplicationInfo = paramPackageInfo.applicationInfo;
      

      找到包名:localApplicationInfo.packageName

      找到的应用程序路径:localApplicationInfo.sourceDir

      【讨论】:

        【解决方案5】:

        我建议为此使用包管理器工具。 adb shell pm path your.package.name

        使用示例:

        #List all installed packages
        $ adb shell pm list packages
        package:com.android.soundrecorder
        ....
        package:com.android.email           # <-- System app
        ....
        package:course.labs.intentslab.test # <-- Custom app
        
        #Path for system app:
        $ adb shell pm path com.android.email
        package:/system/app/Email.apk
        
        #Path for regular app:
        $ adb shell pm path course.labs.intentslab.test
        package:/data/app/course.labs.intentslab.test-1.apk
        

        来自文档:

        path PACKAGE 打印给定 PACKAGE 的 APK 的路径

        Using package manager (pm)

        Some info on Android StackOverflow

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-17
          • 1970-01-01
          • 2023-03-28
          • 1970-01-01
          • 1970-01-01
          • 2021-08-20
          相关资源
          最近更新 更多