Почему xamarin не может подключиться к отладчику? - PullRequest
0 голосов
/ 26 апреля 2020

Я решил написать свой собственный класс приложения для установки и получения текущей активности на переднем плане. Однако, когда я добавляю атрибут name=".PersonalOrgApp" Xamarin успешно загружает на телефон изменения, но не может начать отладку. При удалении этой строки приложение работает нормально. Вот мой код: AndroidManifest. xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
          android:versionCode="1" 
          android:versionName="1.0" 
          package="com.companyname.finallyapp">
  <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
  <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:supportsRtl="true" android:theme="@style/AppTheme"
               android:name=".PersonalOrgApp">
  </application>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

и класс приложения:

public class PersonalOrgApp : Application
    {
        static private Activity mCurrentActivity = null;
        static private int mActivityId = -1;
        public override void OnCreate()
        {
            base.OnCreate();
        }
        public override void OnConfigurationChanged(Configuration newConfig)
        {
            base.OnConfigurationChanged(newConfig);
        }
        public override void OnLowMemory()
        {
            base.OnLowMemory();
        }
        public override void OnTerminate()
        {
            base.OnTerminate();
        }
        static public void SetCurrentActivity(Activity activity, int id)
        {
            mCurrentActivity = activity;
            mActivityId = id;
        }
        static public void SetCurrentActivity(Activity activity)
        {
            mCurrentActivity = activity;
        }
        static public Activity GetCurrentActivity()
        {
            return mCurrentActivity;
        }
        static public int GetActivityId()
        {
            return mActivityId;
        }
        static public void ClearReference(Activity activity)
        {
            if (activity.Equals(mCurrentActivity))
            {
                mActivityId = -1;
                mCurrentActivity = null;
            }
        }
    }

И журналы:

[D:NotifyPhase]:          Upload completed
[D:GetLogCat]:            logcat -v time
[D:RunShellCommand]:      3300633ca56313c5 logcat -v time
[D:RunShellCommand]:      3300633ca56313c5 date +%s
[D:RunShellCommand]:      3300633ca56313c5 setprop "debug.mono.extra" "debug=127.0.0.1:29246:29247,timeout=1587899376,loglevel=0,server=y"
[D:RunShellCommand]:      3300633ca56313c5 getprop
[D:RunShellCommand]:      3300633ca56313c5 "echo" "-n" "${EMULATED_STORAGE_SOURCE}"
[D:RunShellCommand]:      3300633ca56313c5 "echo" "-n" "${EMULATED_STORAGE_TARGET}"
[D:RunShellCommand]:      3300633ca56313c5 am broadcast -a "mono.android.intent.action.EXTERNAL_STORAGE_DIRECTORY" -n "Mono.Android.DebugRuntime/com.xamarin.mono.android.ExternalStorageDirectory"
[D:RunShellCommand]:      3300633ca56313c5 am start -a "android.intent.action.MAIN" -c "android.intent.category.LAUNCHER" -n "com.companyname.finallyapp/crc64a85b0d386beebbeb.MainActivity"
[D:RunShellCommand]:      3300633ca56313c5 ps
[D:RunShellCommand]:      3300633ca56313c5 am force-stop com.companyname.finallyapp
[D:RunShellCommand]:      3300633ca56313c5 setprop "debug.mono.connect" ""

1 Ответ

1 голос
/ 27 апреля 2020

Вы добавили [Application] к вашему PersonalOrgApp?

И вам также может понадобиться добавить public PersonalOrgApp(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip){}, например:

[Application]
public class PersonalOrgApp : Application
{
    static private Activity mCurrentActivity = null;
    static private int mActivityId = -1;


    public PersonalOrgApp(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip)
    {
    }

    public override void OnCreate()
    {
        base.OnCreate();
    }
    public override void OnConfigurationChanged(Configuration newConfig)
    {
        base.OnConfigurationChanged(newConfig);
    }
    public override void OnLowMemory()
    {
        base.OnLowMemory();
    }
    public override void OnTerminate()
    {
        base.OnTerminate();
    }
    static public void SetCurrentActivity(Activity activity, int id)
    {
        mCurrentActivity = activity;
        mActivityId = id;
    }
    static public void SetCurrentActivity(Activity activity)
    {
        mCurrentActivity = activity;
    }
    static public Activity GetCurrentActivity()
    {
        return mCurrentActivity;
    }
    static public int GetActivityId()
    {
        return mActivityId;
    }
    static public void ClearReference(Activity activity)
    {
        if (activity.Equals(mCurrentActivity))
        {
            mActivityId = -1;
            mCurrentActivity = null;
        }
    }
}
...