通過ApplicationInfo下的sourceDir獲取APK所有的class

今天,在學習注解處理器 AnnotationProcess 時,學習到了一點新知,記錄下來,以備日后查閱,也讓書友中的Android新人們可以了解了解,并能夠應(yīng)用到項目中去。

對于 android.content.pm.ApplicationInfo類,Android開發(fā)者應(yīng)該都不陌生,通過這個類我們可以獲取應(yīng)用的如下常用屬性,這些屬性通常來自于AndroidManifest中。

backupAgentName 備份的類
className 應(yīng)用程序類
processName 進程名
dataDir 數(shù)據(jù)所在目錄
sourceDir 應(yīng)用apk所在目錄
publicSourceDir 應(yīng)用apk所在目錄
nativeLibraryDir 本地lib庫目錄(c/c++庫)
enabled 是否啟用應(yīng)用所有組件,默認true
flags 應(yīng)用關(guān)聯(lián)標志
targetSdkVersion 最小SDK版本
descriptionRes 應(yīng)用描述資源
theme 主題資源

今天,我主要講一下 sourceDir。

通過這個目錄,我們可以獲取到apk的所有class,拿到想要的class,我們就可以通過反射機制 “干壞事” 了。

直接上干貨吧:

String path = context.getPackageManager().getApplicationInfo(context.getPackageName(), 0).sourceDir;
DexFile dexfile = new DexFile(path);
Enumeration entries = dexfile.entries();
while(entries.hasMoreElements()) {
  String name = (String)entries.nextElement();
  if(name.contains(packageName)){
    classList.add(name);
  }
}

上述代碼片段,遍歷所有class,找到指定包名packageName下的class,加入列表,然后,我們就可以在注解處理器中干點“壞事”了,哈哈。

知識點雖小,但日積月累,一定能夠厚積薄發(fā)?。。?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容