2011-04-20 81 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