2011-04-20 86 views
9

我想從android apk文件中提取所有活動名稱。 任何想法有多大可能完成?從Android中的apk文件讀取活動名稱

感謝名單 KAPS

+0

本應該表現得工作:http://stackoverflow.com/questions/3868768/extracting-android-apk-and-reading-contents-of-xml-file-in-res-layout – bigstones 2011-04-20 10:42:50

+0

我想以編程方式執行此操作,這是否仍然有用? – Smith 2011-04-20 11:09:24

回答

10

您可以使用PackageManager方法getPackageArchiveInfo從APK文件中檢索信息。假設您的APK住在你的SD卡的根目錄,你可以使用此代碼:

String apkPath = Environment.getExternalStorageDirectory().getAbsolutePath() 
        + "/MyApp.apk"; 
    PackageManager pm = getPackageManager(); 

    PackageInfo info = pm.getPackageArchiveInfo(apkPath, 
          PackageManager.GET_ACTIVITIES); 
    //Log.i("ActivityInfo", "Package name is " + info.packageName); 

    for (android.content.pm.ActivityInfo a : info.activities) { 
     Log.i("ActivityInfo", a.name); 
    } 

有很多,你可以在ActivityInfo和PackageInfo對象找到更多信息。

0

你可以使用反編譯器一樣Dedexer,然後你可以看看清單。

+1

你確定你需要一個反編譯器嗎?清單應該可以在apk文件的根目錄下訪問和讀取... – WarrenFaith 2011-04-20 11:01:31

+0

我想以編程方式執行此操作,我可以從我的Java代碼訪問此工具嗎? – Smith 2011-04-20 11:10:33

+0

@WarrenFaith。大概你是對的,我剛纔提到了一個可能的解決方案。我看到的@kaps。如果你想做它programatiicaly,你不能使用我的解決方案。 – 2011-04-20 11:40:24

20

如果你只是想在命令行中一一列舉了,你可以使用

aapt dump xmltree <apk-file> AndroidManifest.xml 

格式開頭有點令人費解,但所有的信息是存在的。

當然,您需要安裝Android SDK來執行此操作。

+0

偉大的提示。請使這個答案:http://stackoverflow.com/questions/6547703/list-all-activities-within-an-apk-from-the-shell – scorpiodawg 2012-10-05 20:05:51

0

其實不用得到的apk的路徑,直接在活動內調用

(英文翻譯)你不必使用完整路徑APK,只需調用直接從活動中以下。

PackageManager manager = getPackageManager(); 
PackageInfo packageInfo = manager.getPackageInfo("your package name", PackageManager.GET_UNINSTALLED_PACKAGES); 
+1

英文,請... – JJJ 2012-05-28 06:38:04