标签: xamarin.android

Xamarin.Android构建/部署非常慢.如何加快速度?

我们有一个大型的Xamarin.Android项目,有两个依赖项目和一堆第三方dll.在Hax-x86仿真器或Nexus 5设备上进行调试部署(无需任何更改)非常缓慢(> 80秒).为了比较,App的Xamarin.iOS版本在7秒内部署到真实设备上.

为了测试部署时间,我还创建了一个新的Xamarin.Android项目,该项目在大约四秒钟内部署.当我添加依赖项目时,部署时间最多为7秒.当我将布局文件添加到依赖项目时,部署时间增加到大约十秒.

是否可以使用Xamarin Studio加速Android构建和部署?相比之下,大型Eclipse Android项目的部署速度相当快.

更新:

只运行安装构建步骤大约需要40秒:

time xbuild /t:Install BigApp.csproj
...
...
...
Time Elapsed 00:00:42.8526970
Run Code Online (Sandbox Code Playgroud)

大约一半的时间花在上面的命令打印到控制台的地方:

Target _CompileDex:
      JavaSourceFiles:
      JavaLibraries:
      ExternalJavaLibraries:
Tool /usr//bin/java execution started with arguments: -Xmx512M -jar 
/Users/myname/Library/Developer/Xamarin/android-sdk-mac_x86/build-tools/17.0.0//lib/dx.jar 
--no-strict --dex --output=obj/Debug/android/bin/classes.dex obj/Debug/android/bin/classes
/Library/Frameworks/Xamarin.Android.framework/Versions/Current/lib/mandroid/platforms/android-15/mono.android.jar
/Users/myname/Projects/BigApp/obj/Debug/__library_projects__/TestFlightBindings.Jars.TestFlightLib_1_2.jar
/Users/myname/Projects/BigApp/obj/Debug/__library_projects__/android-support-v4.jar
/Users/myname/Projects/BigApp/obj/Debug/__library_projects__/classes.jar
/Users/myname/Library/Developer/Xamarin/android-sdk-mac_x86/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
Run Code Online (Sandbox Code Playgroud)

当我从Xamarin Studio运行解决方案时,此步骤发生两次.一次用于依赖项目,一次用于主项目.我尝试在控制台上重现此行为

"/Applications/Xamarin Studio.app/Contents/MacOS/mdtool" -v build "--configuration:Debug -t Install" "BigApp.sln"
Run Code Online (Sandbox Code Playgroud)

但这只会构建主项目.

更新:

我创建了一个部署时间非常慢的小型演示项目:https: //github.com/perpetual-mobile/SlowAndroidDeploymentWithXamarin

android build xamarin.android xamarin

21
推荐指数
1
解决办法
1万
查看次数

缓慢的应用程序构建 - Xamarin for Visual Studio

这些天我的Xamarin.Android应用程序的构建/部署非常缓慢.我不记得以前这么慢.

我启用了:

  • 使用共享运行时
  • 快速部署

启用或禁用这些设置没有任何区别.在这两种情况下,构建/部署我的应用程序大约需要2分20秒(最多3分钟!).使用真实设备或Android版Visual Studio模拟器也没有任何区别.

为什么这会非常慢?我没有使用正确的设置吗?

更新2

昨天(11月14日)我将Xamarin.VS更新为4.2.1.58.构建持续时间没有改善.

我们正在使用TeamCity构建我们的应用程序的发布版本,TeamCity统计数据完全显示了我正在谈论的内容.

在下图中,我选择了上一季度作为日期范围.查看构建持续时间的主要增加.现在,我不介意等待3分钟发布版本,但是在调试时它是不可接受的.

11月7日,在安装最新的Xamarin更新之前 11月8日,安装更新并定位Android 7后

更新3

乔恩,谢谢你的帮助.

与此同时,我在构建日志中自己做了一些研究,并找到了每个构建任务的持续时间.我发现不知何故GetAdditionalResourcesFromAssemblies需要花费很多时间.

我在应用程序中拥有的资源量没有显着变化,所以这让我想到:它可能是我正在使用的另一个程序集.

然后,我检查了修订版1029(这是最后一次修改需要花费一分钟时间),并尝试在更新的环境中对其进行调试.它仍然在1分30秒内建成......

所以:

  • 它可能不是VS Xamarin更新(否则修订版1029也会变慢)
  • It's probably not fast deployment, the duration increased in the build process

So what was changed between revision 1029 and 1030 of my app?

  1. Updated Xamarin for Visual Studio to 4.2.0.719
  2. Installed Android 7.0 SDK platform in Android SDK Manager
  3. Changed Compile using Android version to Android 7.0 in project properties
  4. Updated Xamarin.Android Support Libraries from 23.4.0.1 to 24.2.1 …

visual-studio xamarin.android xamarin visual-studio-2015

21
推荐指数
1
解决办法
6797
查看次数

名称不能以'$'字符开头,十六进制值0x24

我有这个警告永远不会消失,我不知道如何修复它:

警告名称不能以'$'字符开头,十六进制值0x24.

.Android C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Community\MSBuild\Xamarin\Android

C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets 1668 Build

在启用详细的详细程度后,它指向Xamarin.Android.Common.targets文件的这一部分:

<Target Name="_GenerateJavaStubs" DependsOnTargets="_SetLatestTargetFrameworkVersion;_PrepareAssemblies;$(_AfterPrepareAssemblies)" Inputs="$(MSBuildAllProjects);@(_ResolvedAssemblies);$(_AndroidManifestAbs);$(_AndroidBuildPropertiesCache)" Outputs="$(IntermediateOutputPath)android\AndroidManifest.xml;$(_AcwMapFile);$(_AndroidTypeMappingJavaToManaged);$(_AndroidTypeMappingManagedToJava)">
  <GenerateJavaStubs ResolvedAssemblies="@(_ResolvedAssemblies)" ResolvedUserAssemblies="@(_ResolvedUserAssemblies)" ManifestTemplate="$(_AndroidManifestAbs)" MergedManifestDocuments="@(ExtractedManifestDocuments)" Debug="$(AndroidIncludeDebugSymbols)"
    NeedsInternet="$(AndroidNeedsInternetPermission)" AndroidSdkPlatform="$(_AndroidApiLevel)" AndroidSdkDir="$(_AndroidSdkDirectory)" PackageName="$(_AndroidPackage)" ManifestPlaceholders="$(AndroidManifestPlaceholders)" OutputDirectory="$(IntermediateOutputPath)android"
    MergedAndroidManifestOutput="$(IntermediateOutputPath)android\AndroidManifest.xml" UseSharedRuntime="$(AndroidUseSharedRuntime)" EmbedAssemblies="$(EmbedAssembliesIntoApk)" ResourceDirectory="$(MonoAndroidResDirIntermediate)" BundledWearApplicationName="$(BundledWearApplicationPackageName)"
    PackageNamingPolicy="$(AndroidPackageNamingPolicy)" ApplicationJavaClass="$(AndroidApplicationJavaClass)" AcwMapFile="$(_AcwMapFile)">
  </GenerateJavaStubs>
  <ConvertResourcesCases ResourceDirectories="$(MonoAndroidResDirIntermediate)" AcwMapFile="$(_AcwMapFile)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

我不知道是否需要修改此文件或者我的某个文件是否导致该问题.我仔细检查过,我的文件实际上都没有以$开头.

有任何想法吗?

谢谢.

xamarin.android xamarin visual-studio-2017

21
推荐指数
1
解决办法
2189
查看次数

Mono.Linker.MarkException:错误处理方法:'System.Void AndroidX.RecyclerView.Widget.RecyclerView/LayoutManager

我正在尝试调试我的 Xamarin 项目。框架和所有包都是最新的。在 iOS 中它有效,但在 Android 中无效。我怎么解决这个问题:

Mono.Linker.MarkException: Error processing method: 'System.Void AndroidX.RecyclerView.Widget.RecyclerView/LayoutManager::n_OnInitializeAccessibilityNodeInfo_Landroidx_recyclerview_widget_RecyclerView_Recycler_Landroidx_recyclerview_widget_RecyclerView_State_Landroidx_core_view_accessibility_AccessibilityNodeInfoCompat_(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr)' in assembly: 'Xamarin.AndroidX.RecyclerView.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve AndroidX.Core.View.Accessibiity.AccessibilityNodeInfoCompat
   at Mono.Linker.Steps.MarkStep.HandleUnresolvedType(TypeReference reference)
   at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
   at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
   at Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body)
   at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method)
   at Mono.Linker.Steps.MarkStep.ProcessQueue()
   --- End of inner exception stack trace ---
   at Mono.Linker.Steps.MarkStep.ProcessQueue()
   at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
   at Mono.Linker.Steps.MarkStep.Process()
   at Mono.Linker.Steps.MarkStep.Process(LinkContext context)
   at MonoDroid.Tuner.MonoDroidMarkStep.Process(LinkContext context)
   at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
   at Mono.Linker.Pipeline.Process(LinkContext context)
   at MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context)
   at Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res)
   at Xamarin.Android.Tasks.LinkAssemblies.RunTask()
   at …
Run Code Online (Sandbox Code Playgroud)

mono android xamarin.android xamarin android-recyclerview

21
推荐指数
3
解决办法
5068
查看次数

Mac上的debug.keystore在哪里?

我正在尝试生成我的指纹,它应该在这里:~/.android/debug.keystore,但我没有任何东西,虽然我也可以正常运行我的monodroid项目,所以我怎样才能找到debug.keystore文件?

macos android google-maps xamarin.android

20
推荐指数
5
解决办法
3万
查看次数

防止Xamarin Android应用程序中的方向更改

是否可以防止Android应用程序的方向发生变化?我有一个预览手机摄像头的应用程序,我希望方向不要改变.

我已经尝试将其添加到清单中,但它没有任何区别

<application android:label="TextureViewCameraStream" android:hardwareAccelerated="true">
    </application>
    <activity
       android:screenOrientation="portrait"
       android:configChanges="orientation|keyboardHidden">
    </activity>
Run Code Online (Sandbox Code Playgroud)

我正在使用Xamarin for Android和C#

谢谢

c# android xamarin.android xamarin

20
推荐指数
1
解决办法
1万
查看次数

Resource.Designer.cs中的模糊引用智能感知错误

我在Visual Studio 2017上开发时遇到了一个奇怪的错误,我已经能够忽略一段时间,但现在开始真的我感到烦恼.

我将此问题称为错误而不是错误,因为我仍然可以在Visual Studio中构建我的项目并将它们部署到我的开发设备,而不会出现构建输出中的错误或警告.这似乎可以忽略一点,但随着时间的推移它已成为一个问题,因为我的intellisense用红色强调它作为一个错误

一个

每次我引用Resource类的属性.正如你可能猜到的那样,我引用了很多这个类,Visual Studio编辑器最终变得混乱了这些"错误",它们(a)阻碍了我在代码中发现实际错误的能力,并且(b)让我无法理解......

"错误"调查

  • 如上图所示,intellisense正在为Resource类中的每个属性选择一个"不明确的引用".当我检查我的Resource.Designer.cs文件时,我只看到一个引用,但得到第二个错误

b.

  • 它现在告诉我,已经声明"具有相同名称的成员".这让我相信有第二个Resource.Designer.cs文件,但我的解决方案资源管理器和Windows资源管理器都只显示一个.

C

试图解决方案

  • 将命名空间从InventoryApp(文件的默认命名空间)更改为InventoryApp.Resources.这让我摆脱了可怕的错误,但是在构建项目时,它将文件中的命名空间恢复为默认值,并且错误会弹回.有人告诉我,我知道这是一个很大的禁忌.
  • 删除了Resource.Designer.cs文件,从项目中删除了"obj"和"bin"文件夹,清理并重建了解决方案,然后将新的Resource.Designer.cs文件添加回我的解决方案.这没有解决问题.
  • 从头开始创建一个全新的项目.即使在从Visual Studio模板创建空白Android应用程序后,错误仍然存​​在.这引出了一个问题:这是我安装Xamarin.Android的问题吗?

侧面笔记

  • Resource.Designer.cs文件的生成操作设置为"编译"
  • .csproj的配置文件包含的标签:

    <AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
    <AndroidResgenClass>Resource</AndroidResgenClass>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
    <TargetFrameworkVersion>v7.1</TargetFrameworkVersion>
    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
    
    Run Code Online (Sandbox Code Playgroud)

c# xamarin.android android-resources xamarin

20
推荐指数
1
解决办法
2839
查看次数

在Android上连接Xamarin的配对蓝牙设备

当应用程序通过A2DP或Hands Free Profile启动时,我们需要我们的应用程序能够自动连接到配对的蓝牙设备.

我们正在使用Xamarin(monodroid),用于Android平台.

我发现了这个stackoverflow问题:以编程方式连接到配对的蓝牙设备

但它与本土方法有关(见kcoppock的回答).我想知道是否有办法通过Xamarin实现这一目标.我们可以连接到SPP端点,因为它是基于RFCOMM的连接,但我们需要它和音频连接,所以我们想要一种连接到A2DP的方法.

更新1:

我们尝试使用如下CreateInsecureRfcommSocketToServiceRecord方法连接:

mmSocket = device.CreateInsecureRfcommSocketToServiceRecord(0000110A-0000-1000-8000-00805F9B34FB); mmSocket.Connect();

在致电Connect时,我们收到错误消息:

read failed, socket might closed or timeout, read ret: -1

堆栈跟踪始于:

Java.IO.IOException at Android.Runtime.JNIEnv.CallVoidMethod (IntPtr jobject, IntPtr jmethod) [0x00062] in /Users/buil…

更新2:

顺便说一句,当我们尝试使用kcoppock的方法通过本机java测试应用程序连接时,连接代码似乎没有错误,但设备没有作为A2DP耳机连接.

我们看到能够做到的唯一编程方式Google Play应用,它证明了这是可能的.

android bluetooth xamarin.android xamarin android-bluetooth

19
推荐指数
1
解决办法
1万
查看次数

Xamarin DependencyService:System.MissingMethodException:找不到[Interface]的默认构造函数

我在使用依赖服务时收到此错误Xamarin.Forms PCL.我已经看到了答案,这个错误涉及iOSLinker.但是,我正在运行此功能Android并且Linker已关闭.调试模式也是如此.

它告诉我的构造函数无法在PCL中找到接口的默认构造函数.

我认为这可能是我做过的一些重命名问题(我使用了重构工具并确保所有必要的更改都已完成)所以我删除了那些文件夹/文件并重新制作它们.依然没有 :(

我一直在搜索和调试这几个小时.有什么东西可能导致这个错误?我很确定我的DependencyService实现是正确的,所以我觉得它是不同的东西.

这是我的相关代码.

接口:

namespace Enchantum.Functions
{
public interface PaymentProcessor
{

    void setUpCard(String cardNumber,
        int expirationMonth,
        int expirationYear,
        String CVC);

    Task cardTokenizer();

    void backendCardCharge();

}
Run Code Online (Sandbox Code Playgroud)

安卓:

[assembly: Xamarin.Forms.Dependency(typeof(PaymentProcessor_Android))]

namespace Enchantum.Droid.Functions_Android
{
class PaymentProcessor_Android : PaymentProcessor
{
public PaymentProcessor_Android() { }

    private Card mCard;
    private Token mToken;

    public void setUpCard(String cardNumber, int expirationMonth,
        int expirationYear, String cvcCode)
    {
        Card card = new Card
        {
            Number …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection xamarin.android stripe.net xamarin.forms

19
推荐指数
3
解决办法
9162
查看次数

Xamarin-此版本不符合Google Play 64位要求

我在Visual Studio中将apk存档并部署到了Google Play商店,但它不允许我继续进行Beta版发布,并且Beta版发布页面上的唯一消息是以下警告:

在此处输入图片说明

单击错误后,出现下一条消息:

在此处输入图片说明

消息中提供的链接仅适用于Android Studio,不适用于Visual Studio,因此我不知道如何解决此问题。

visual-studio xamarin.android google-play xamarin.forms

19
推荐指数
1
解决办法
4122
查看次数