如果我已经知道目标apk的包名,我想获得程序的确切文件名。例如,如果我知道我的apk的包名,即com.packagename,我该如何获得该包的确切路径和文件名?顺便说一句,我不想得到我的apk位置,我想要我申请的任何包名称的位置。 SystemTuner pro能够做到这一点,所以我知道它是可能的,只是不确定如何。
谢谢你们!
答案 0 :(得分:4)
PackageManager.getPackageInfo()返回有关该包的信息,PackageInfo.applicationInfo字段包含有关该应用程序的所需信息。
答案 1 :(得分:4)
/**
* Get the apk path of this application.
* @param context any context (e.g. an Activity or a Service)
* @return full apk file path, or null if an exception happened (it should not happen)
*/
public static String getApkName(Context context) {
String packageName = context.getPackageName();
PackageManager pm = context.getPackageManager();
try {
ApplicationInfo ai = pm.getApplicationInfo(packageName, 0);
String apk = ai.publicSourceDir;
return apk;
} catch (Throwable x) {
}
return null;
}
答案 2 :(得分:3)
嗯,我想将Yuri标记为答案,但我已经知道了那些东西。所以我查看了PackageManager.ApplicationInfo
中的每个选项,找到了.publicSourceDir
所以我的问题代码的完整答案将是
PackageManager pm = getPackageManager();
try {
ApplicationInfo ai = pInfo.getApplicationInfo(<packageName here>, 0);
String sourceApk = ai.publicSourceDir;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
再次感谢大家,让我的大脑再一次爱上StackOverflow!
答案 3 :(得分:0)
在以上答案中,需要将pInfo更改为pm
像这样
PackageManager pm = getPackageManager();
try {
ApplicationInfo ai = pm.getApplicationInfo(<packageName here>, 0);
String sourceApk = ai.publicSourceDir;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Seth的答案