para - manual de programacion android pdf
Comience la actividad con adb (2)
Tengo una aplicación de prueba más simple, desarrollada con xamarin, implementada en un droide conectado por USB. Con el objetivo de tener un día una url de intención de trabajo, intento llamar a mi actividad principal con adb shell am. Aquí están las primeras líneas de mi actividad principal ...
namespace DematAEAT_Android
{
[Activity(Label = "DematAEAT_Android", MainLauncher = true, Icon = "@drawable/icon")]
[IntentFilter(new[] { "AcquireSignedImage" },
Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault })]
public class MainActivity : Activity
{
int count = 1;
Aquí hay dos comandos de shell. En el primero, el administrador de paquetes entiende con éxito el nombre del paquete e informa la ruta apk. En el segundo, el administrador de actividades no puede resolver la clase MainActivity. Falla con o sin el espacio de nombres.
C:/Program Files (x86)/Android/android-sdk/platform-tools>adb -d shell pm path "fr.company.DematAEAT_Android"
package:/data/app/fr.company.DematAEAT_Android-1/base.apk
C:/Program Files (x86)/Android/android-sdk/platform-tools>adb -d shell am start -n "fr.company.DematAEAT_Android/.DematAEAT_Android.MainActivity"
Starting: Intent { cmp=fr.company.DematAEAT_Android/.DematAEAT_Android.MainActivity }
Error type 3
Error: Activity class {fr.company.DematAEAT_Android/fr.company.DematAEAT_Android.DematAEAT_Android.MainActivity} does not exist.
editar ... Y, sin embargo, puedo lanzar felizmente usando mono. El siguiente comando funciona bien. Es como si hubiera un problema con la forma en que estoy nombrando mi clase de actividad en el adb shell am call, pero no puedo encontrarlo.
C:/Program Files (x86)/Android/android-sdk/platform-tools>adb shell monkey -p fr.company.DematAEAT_Android 1
Events injected: 1
## Network stats: elapsed time=170ms (0ms mobile, 0ms wifi, 170ms not connected)
¿Alguien puede decirme cómo llamar a esta actividad?
Este fue un cambio radical en Xamarin Android 5.0
Naming de Wrapper llamable de Android
El esquema de cambio de nombre de Android Callable Wrappers está cambiando. Anteriormente, el nombre del paquete del Contenedor invocable de Android se construía bajando el nombre del espacio de nombres, lo que daría lugar a errores de empaquetado si más de un ensamblaje contenía un tipo con el mismo nombre totalmente calificado.
Con la versión 5.0, los nombres predeterminados de los paquetes para los Contenedores invocables de Android se basarán en el MD5SUM del nombre calificado para el ensamblaje del tipo que se está exportando. Esto permite que se proporcione el mismo nombre totalmente calificado de dos ensamblajes diferentes y no se obtenga un error de empaquetado.
Puede anularlo para su Actividad especificando el nombre en el atributo [Activity]
:
[Activity(Name = "fr.company.demeat_android.MainActivity")]
public class MainActivity : Activity {
/* ... */
}
Bueno, ¿quién sabía? Necesitaba buscar en mi manifest.xml para descubrir que xamarin agrega un hash como espacio de nombre delante de mi nombre de actividad. Entonces, la llamada adb que funciona así ...
C:/Program Files (x86)/Android/android-sdk/platform-tools>adb -d shell am start -n fr.company.DematAEAT_Android/md5abda05033ab0415fc7a776c5d9734c74.BrowsableActivity
Starting: Intent { cmp=fr.company.DematAEAT_Android/md5abda05033ab0415fc7a776c5d9734c74.BrowsableActivity }
La historia continúa aquí . Es probable que esto sea un problema para cualquiera que intente iniciar una actividad de xamarin a través de adb shell am o para intentar iniciar una actividad de xamarin con un intento o una url de intención.