Android 如何获取 apk 安装的路径

在 Android 开发中,有时候我们需要获取已安装的应用程序的安装路径。例如,我们可能需要查找某个应用程序的 apk 文件,或者需要获取安装路径来进行一些文件操作等。本文将介绍如何在 Android 中获取已安装应用程序的安装路径,并提供示例代码进行演示。

方法一:使用 PackageManager

Android 提供了 PackageManager 类,它可以帮助我们获取已安装应用程序的信息。我们可以使用 PackageManagergetPackageInfo() 方法来获取应用程序的信息,其中包括应用程序的安装路径。

以下是一个示例代码:

String packageName = "com.example.app"; // 应用程序的包名
PackageManager packageManager = getPackageManager();
try {
    PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
    String appPath = packageInfo.applicationInfo.sourceDir;
    Log.d("App Path", appPath);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

上述代码中,我们首先指定了应用程序的包名 packageName ,然后通过 PackageManagergetPackageInfo() 方法获取应用程序的信息。PackageInfo 中的 applicationInfo.sourceDir 属性即为应用程序的安装路径。我们可以通过 Log.d() 方法打印出应用程序的安装路径。

方法二:使用 ApplicationInfo

除了使用 PackageManager 外,还可以通过 ApplicationInfo 类来获取已安装应用程序的安装路径。

以下是示例代码:

String packageName = "com.example.app"; // 应用程序的包名
PackageManager packageManager = getPackageManager();
try {
    ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0);
    String appPath = applicationInfo.sourceDir;
    Log.d("App Path", appPath);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

上述代码中,我们同样指定了应用程序的包名 packageName ,然后通过 PackageManagergetApplicationInfo() 方法获取应用程序的信息。ApplicationInfo 中的 sourceDir 属性即为应用程序的安装路径。

示例应用

为了更好地演示如何获取应用程序的安装路径,我们创建了一个简单的示例应用。该应用包含一个按钮,点击按钮后会获取当前应用程序的安装路径,并将路径显示在文本框中。

首先,我们创建一个布局文件 activity_main.xml,包含一个按钮和一个文本框:

<RelativeLayout xmlns:android="
    xmlns:tools="
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingTop="16dp"
    android:paddingRight="16dp"
    android:paddingBottom="16dp"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnGetPath"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取安装路径"
        android:layout_centerInParent="true" />

    <EditText
        android:id="@+id/etPath"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/btnGetPath"
        android:layout_marginTop="16dp"
        android:inputType="text"
        android:hint="安装路径"
        android:enabled="false" />

</RelativeLayout>

然后,我们在 MainActivity.java 中实现点击按钮后获取应用程序安装路径的逻辑:

import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private Button btnGetPath;
    private EditText etPath;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnGetPath = findViewById(R.id.btnGetPath);
        etPath = findViewById(R.id.etPath);

        btnGetPath.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String packageName = getPackageName();
                PackageManager packageManager = getPackageManager();
                try {
                    ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0);
                    String appPath = applicationInfo.sourceDir;
                    etPath.setText(appPath);
                    Log.d("App Path", appPath);
                } catch (PackageManager.NameNotFoundException e) {
                    e.printStackTrace();
                }
            }