android獲取應用基本信息

在android系統上面,我們想查看一個應用的信息,可以使用PackageManager來獲得

PackageManager pm = context.getPackageManager();
PackageInfo pi = pm.getPackageInfo(packageName, 0);

我們可以直接獲得versionCode, versionName以及應用入口(如果有的話)

String versionName = pi.versionName;
long versionCode;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    versionCode  = pi.getLongVersionCode();
} else {
    versionCode  = pi.versionCode;
}
Intent launchIntent = pm.getLaunchIntentForPackage(pi.packageName);

這裏要注意一下,從Android P開始,versionCode不再是int而是long類型,LongVersionCode結合了versionCodeMajor和versionCode。
我們也可以使用PackageInfoCompat獲取versionCode

long versionCode = PackageInfoCompat.getLongVersionCode(pi);

然後,我們可以使用ApplicationInfo配合PackageInfo來獲取應用名稱,應用圖標,Uid,應用apk文件位置,是否爲系統應用,是否可以debug,還能獲取到應用的Application,應用私有數據存放路徑,native JNI庫存放路徑等等

ApplicationInfo applicationInfo = pi.applicationInfo;
String appName = applicationInfo .loadLabel(pm).toString(); //應用名稱
Drawable iconDrawable = applicationInfo.loadIcon(pm); //應用圖標
int uid = applicationInfo.uid; //uid
String apkPath = applicationInfo.sourceDir; //apk存放路徑
String dataDir = applicationInfo.dataDir; //私有數據存放路徑
String nativeLibraryDir = applicationInfo.nativeLibraryDir; //native JNI庫存放路徑
int flags = applicationInfo.flags;
boolean isSystemApp = (ApplicationInfo.FLAG_SYSTEM & appInfo.getFlags()) == ApplicationInfo.FLAG_SYSTEM; //是否爲系統應用
boolean debuggable = (applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) == ApplicationInfo.FLAG_DEBUGGABLE; //是否可debug

除此之外,我們還可以得到應用大小,apk文件的md5/sha1/sha256等等。上面我們介紹瞭如何獲取apk文件所在位置,第三方應用在/data/app下的一個地方,重點是,這個apk文件我們是有讀取權限的!也就是說,我們很容易計算得到apk的大小以及md5/sha1/sha256等等。我就不在演示。系統應用的apk位置我們也是由讀取權限的,同樣可以獲得上述信息。

除此之外,我們還能獲取targetSdkVersion,如果手機版本爲android 7.0+,我們還能獲取到minSdkVersion

ApplicationInfo applicationInfo = pm.getApplicationInfo(packageName, 0);
int targetSdkVersion = applicationInfo.targetSdkVersion;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    int minSdkVersion = applicationInfo.minSdkVersion;
}

我們還可以拿到應用的安裝時間以及最近更新時間

long installTime = pi.firstInstallTime; //安裝時間
long updateTime = new File(mSourceDir).lastModified(); //更新時間

我們在開發調試時,上述信息可能對我們很重要,如果能快速查看可能會節省很多時間。

在此給大家推薦一款應用 - android開發工具箱, 點我直達應用寶
這個應用已經幫大家實現了上面的所有功能,它還獲取到了部分應用的compileSdkVersion,以及低版本中獲取minSdkVersion。

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章