2011-04-20 14 views
9

Deseo extraer todos los nombres de actividades de un archivo apk de Android. ¿Alguna idea de cómo se puede hacer?Lectura de nombres de actividades del archivo apk en Android

Gracias Kaps

+0

esto debería funcionar para manifestarse también: http://stackoverflow.com/questions/3868768/extracting-android-apk-and-reading-contents-of-xml-file-in-res-layout – bigstones

+0

I quiero hacer esto programáticamente, ¿esto todavía será útil? – Smith

Respuesta

10

Puede utilizar el método PackageManager getPackageArchiveInfo para recuperar la información de un archivo APK. Suponiendo sus vidas APK en la raíz de su tarjeta SD, puede utilizar este código:

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); 
    } 

Hay un montón de información adicional se puede encontrar en los objetos ActivityInfo y packageinfo.

0

Se puede usar un decompilador como Dedexer y luego se puede echar un vistazo al manifiesto.

+1

¿Estás seguro de que necesitas un descompilador? El manifiesto debe ser accesible y legible en la raíz del archivo apk ... – WarrenFaith

+0

Quiero hacer esto programáticamente, ¿puedo acceder a esta herramienta desde mi código Java? – Smith

+0

@WarrenFaith. Probablemente tengas razón. Acabo de mencionar una posible solución. @kaps veo. Si quieres hacerlo programáticamente, no puedes usar mi solución. –

20

Si lo que desea es hacer una lista de ellos desde la línea de comandos que puede usar

aapt dump xmltree <apk-file> AndroidManifest.xml 

El formato es un poco desconcertante al principio, pero toda la información está ahí.

Necesita el Android SDK instalado para hacer esto, por supuesto.

+0

Un gran consejo. Haga de esto una respuesta a: http://stackoverflow.com/questions/6547703/list-all-activities-within-an-apk-from-the-shell – scorpiodawg

0

其实 不用 得到 apk 的 路径, 直接 在 actividad 内 调用

(Traducción Inglés) Usted no tiene que usar la ruta completa a la APK, simplemente llame a los siguientes directamente desde el interior de una actividad.

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

En inglés, por favor ... – JJJ

Cuestiones relacionadas