Repository: beeware/briefcase

Issue:
Briefcase shows warning when starting an Android emulator with no skin
**Describe the bug**
To save screen space, I usually create my emulators in Android Studio with no skin. This produces a config.ini file with the following lines:
```
skin.name = 768x1280
skin.path = _no_skin
```

`skin.name` is the resolution of the emulator, and I guess `_no_skin` is a special marker, but neither of these names have subdirectories under `$ANDROID_SDK_ROOT/skins` So Briefcase produces this message:
```
*************************************************************************
** WARNING: Unrecognized device skin                                   **
*************************************************************************

    Briefcase does not recognize the skin '768x1280' used by the
    Android emulator AVD '31'.

    Briefcase will proceed assuming the emulator is correctly
    configured. If you experience any problems running the emulator,
    this may be the cause of the problem.

*************************************************************************
```

**Expected behavior**
Briefcase should probably skip skin verification when `skin.path = _no_skin`.

**Environment:**
 - Operating System: Windows 10
 - Python version: 3.8
 - Software versions:
   - Briefcase: c6ccd4deac


Discussion:

Patch:
diff --git a/changes/882.bugfix.rst b/changes/882.bugfix.rst
new file mode 100644
index 00000000..ef123e54
--- /dev/null
+++ b/changes/882.bugfix.rst
@@ -0,0 +1,1 @@
+Briefcase will no longer display warning about missing skin when running Android emulator with skin path set to `_no_skin`
diff --git a/src/briefcase/integrations/android_sdk.py b/src/briefcase/integrations/android_sdk.py
index cbd33eb1..b35747db 100644
--- a/src/briefcase/integrations/android_sdk.py
+++ b/src/briefcase/integrations/android_sdk.py
@@ -468,8 +468,11 @@ connection.
         try:
             skin = avd_config["skin.name"]
             skin_path = Path(avd_config["skin.path"])
-
-            if skin_path != Path("skins") / skin:
+            if skin_path == Path("_no_skin"):
+                self.tools.logger.debug(
+                    "Skipping skin validation due to '_no_skin' being set as path."
+                )
+            elif skin_path != Path("skins") / skin:
                 self.tools.logger.warning(
                     f"""
 *************************************************************************


Test patch:
diff --git a/tests/integrations/android_sdk/AndroidSDK/test_verify_avd.py b/tests/integrations/android_sdk/AndroidSDK/test_verify_avd.py
index 9ca224e9..940b5e95 100644
--- a/tests/integrations/android_sdk/AndroidSDK/test_verify_avd.py
+++ b/tests/integrations/android_sdk/AndroidSDK/test_verify_avd.py
@@ -163,3 +163,42 @@ def test_unrecognized_emulator_skin(android_sdk, capsys):
 
     # The emulator skin was not verified
     android_sdk.verify_emulator_skin.assert_not_called()
+
+
+def test_no_skin_emulator_skin(android_sdk, capsys):
+    """If the AVD config contains an emulator skin set to _no_skin continiue
+    without validation."""
+    # Mock an AVD configuration that contains a skin.name and skin.path
+    # in an unexpected location
+    android_sdk.avd_config = mock.MagicMock(
+        return_value={
+            "avd.ini.encoding": "UTF-8",
+            "hw.device.manufacturer": "Google",
+            "hw.device.name": "pixel",
+            "weird.key": "good=bad",
+            "PlayStore.enabled": "no",
+            "avd.name": "beePhone",
+            "disk.cachePartition": "yes",
+            "disk.cachePartition.size": "42M",
+            # Add an emulator skin.
+            "skin.name": "768x1280",
+            "skin.path": "_no_skin",
+        }
+    )
+    android_sdk.verify_system_image = mock.MagicMock()
+    android_sdk.verify_emulator_skin = mock.MagicMock()
+
+    # Verify the AVD
+    android_sdk.verify_avd("goodDevice")
+
+    # The AVD config was loaded.
+    android_sdk.avd_config.assert_called_with("goodDevice")
+
+    # A warning message should not be output
+    assert "WARNING: Unrecognized device skin" not in capsys.readouterr().out
+
+    # The system image was not verified
+    android_sdk.verify_system_image.assert_not_called()
+
+    # The emulator skin was not verified
+    android_sdk.verify_emulator_skin.assert_not_called()