今天,在學習注解處理器 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>