You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Visual Studio将Android应用部署到模拟器?

问题描述

我创建了一个测试应用,可正常构建。代码如下:

using System;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Widget;
using System.IO;
using Android.Database;
using OpenFileTest;

namespace OpenFileActivity
{
    [Activity(Label = "OpenFileActivity")]
    public class OpenFileActivity : Activity
    {
        private const int FilePickerRequestCode = 1;
        protected internal Button openFile;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            SetContentView(Resource.Layout.activity_main);
            base.OnCreate(savedInstanceState);
            openFile = (Button)FindViewById(Resource.Id.openFile);
            SetContentView(Resource.Layout.activity_main);
    
            Button openFileButton = FindViewById<Button>(Resource.Id.openFile);
            openFileButton.Click += OpenFileButton_Click;
        }

        private void OpenFileButton_Click(object sender, EventArgs e)
        {
            Intent intent = new Intent(Intent.ActionOpenDocument);
            intent.AddCategory(Intent.CategoryOpenable);
            intent.SetType("*/*"); // Set the MIME type to allow opening all file types
            StartActivityForResult(intent, FilePickerRequestCode);
        }

        protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);

            if (requestCode == FilePickerRequestCode && resultCode == Result.Ok && data != null)
            {
                Android.Net.Uri uri = data.Data;
                string filePath = GetPathFromUri(uri);

                if (!string.IsNullOrEmpty(filePath))
                {
                    // Read the file content
                    string fileData = File.ReadAllText(filePath);

                    // Now you have the file data in the 'fileData' variable
                    // You can process it further as needed
                }
            }
        }

        private string GetPathFromUri(Android.Net.Uri uri)
        {
            string[] projection = { Android.Provider.MediaStore.Images.ImageColumns.Data };
            ContentResolver cr = ContentResolver;

            using (ICursor cursor = cr.Query(uri, projection, null, null, null))
            {
                if (cursor != null && cursor.MoveToFirst())
                {
                    int columnIndex = cursor.GetColumnIndexOrThrow(Android.Provider.MediaStore.Images.ImageColumns.Data);
                    return cursor.GetString(columnIndex);
                }
            }

            return null;
        }
    }
}

当我尝试将其部署到已连接的手机(已选为部署目标)时,Visual Studio却启动模拟器并尝试部署到该模拟器。我该如何阻止Visual Studio使用模拟器?

我另有一款开发中的Android应用,运行时可正常部署到该手机。我可以通过执行以下命令关闭模拟器:

adb -s emulator-5554 emu kill

但Visual Studio为何会选择模拟器呢?


解决方法与原因分析

一、立即阻止模拟器启动的设置调整

  1. 锁定部署目标设备
    • 在Visual Studio顶部的设备选择下拉菜单中,找到你的物理设备名称,点击其旁边的固定图标(🔒),确保后续部署默认指向该设备,不会自动切换到模拟器。
  2. 禁用自动启动模拟器
    • 打开Visual Studio的工具 > 选项 > Xamarin > Android设置,取消勾选“如果没有兼容设备则启动模拟器”的相关选项。
  3. 重置ADB连接
    • 打开命令提示符,执行以下命令:
      adb kill-server
      adb start-server
      
    • 回到Visual Studio,点击设备选择菜单中的刷新按钮,重新识别物理设备。

二、排查自动选择模拟器的核心原因

  1. 应用架构不匹配
    • 检查测试应用的目标架构(项目属性 > Android选项 > 高级 > 支持的架构),是否与物理设备的CPU架构(如arm64-v8a、armeabi-v7a)匹配。如果测试应用仅勾选x86/x86_64架构,而物理设备是ARM架构,Visual Studio会自动选择x86模拟器。
  2. 项目部署配置差异
    • 对比正常应用和测试应用的配置:
      • 检查项目属性 > Android选项 > 部署中的设置,确保“使用快速部署”、“部署到外部存储”等选项与正常应用一致。
      • 查看启动项目配置,确认测试应用的部署目标明确指定为物理设备,而非“默认设备”。
  3. 设备连接状态异常
    • 重新插拔USB数据线,确保设备处于“文件传输”模式且USB调试已开启;执行adb devices命令,确认设备状态显示为device,而非unauthorized或offline。
  4. Visual Studio缓存问题
    • 删除测试应用的bin和obj目录,重新构建项目;进入工具 > Android > 重置Android组件缓存,清理组件缓存。

内容的提问来源于stack exchange,提问作者Ron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:32:18