开发

1、Resource.Id未包含xxx的定义

打开了一个OK的Id,是位于\obj\Debug\90\designtime\Resource.designer.cs ,打开文件搜索xxx,果然没有。

删除此文件 重新生成项目,并没有重新生成Resource.designer.cs

解决方法:

删除整个obj文件夹,重新生成项目;

或者重启VS,自动重新生成Resource.designer.cs了,并且含有xxx

2、Button文本默认大写

参考:xamarin forms中的Button文本默认大写

将按钮的属性textAllCaps都改为false。默认没有设置 是true。

3、ADB0020: Android ABI 不匹配。

问题1:你正将应用支持的“armeabi,armeabi-v7a,x86”ABI 部署到 ABI“x86_64”的不兼容设备。应创建匹配其中一个应用 ABI 的仿真程序,或将“x86_64”添加到应用生成的 ABI 列表中

问题原因:应该是选择的模拟器(X86_64)不匹配,需要创建一个“armeabi,armeabi-v7a,x86”是模拟器来调试。

或者看下“使用共享运行时”是否选中

参考:

说说Android项目中的armeabi,armeabi-v7a和x86

Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

问题2:Please open the Android SDK Manager and install the latest version of 'Android Support Repository' from the 'Extras' section, and then reload your solution.

问题原因:上一步选择X86处理器后,需要安装相应的SDK,和工具中的Android Support Repository

4、方法过时

4.1   [Obsolete("This constructor is obsolete as of version 2.5. Please use PageRenderer(Context) instead.")]

在使用PageRenderer时提示这个构造函数已经过时,发生这种情况的原因是从v2.5版本开始的Xamarin.Forms非常简单,将Xamarin.Forms.Forms的Context属性标记为过时。 因此,要获取渲染器的全局上下文,有必要调用该渲染器的基类,这意味着在构造函数中,您需要执行以下操作: 添加以下代码即可(Please use PageRenderer(Context) instead.)

public WriteEmailPageRenderer(Context context) : base(context)
{
}

参考:How do I resolve WebViewRenderer is obsolete

4.2 Context is obsolete as of version 2.5. Please use a local context instead

报过时的写法:Android.Content.Context content = Forms.Context;  或者  Activity activity = (Activity)Forms.Context;

在Dependencies中定义特定平台的功能时,使用Forms.Context会提示已过时,请改为使用本地环境。

解决方案是在不引用Xamarin.Forms.Forms.Context的情况下获取本地上下文。

注:Android.Content.Context是应用程序环境全局信息上下文,Activity都是继承自此类。

有两种方式解决:

方式1、在接口中提供Init(),然后在MainActivity中调用:VersionHelper.Init(this);

public class VersionHelper : IVersionHelper
{
static Context _context; public static void Init(Context context)
{
_context = context;
}
...

方式2、在MainActivity类中创建一个静态属性,并将其设置为MainActivity实例:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
internal static MainActivity Instance { get; private set; } protected override void OnCreate(Bundle bundle)
{
...
global::Xamarin.Forms.Forms.Init(this, bundle);
Instance = this;
Xamarin.Forms.DependencyService.Register<IVersionHelper, VersionHelper>();
LoadApplication(new App());
}
}

然后接口中使用

using Android.Content;

namespace DependencyServiceAndLocalContext.Droid
{
public class VersionHelper : IVersionHelper
{
public string GetVersionNumber()
{
var versionNumber = string.Empty;
if (MainActivity.Instance != null)
{
versionNumber = MainActivity.Instance.PackageManager.GetPackageInfo(
MainActivity.Instance.PackageName, ).VersionName;
}
return versionNumber;
}
}
}

参考:Xamarin.Forms 2.5 and Local Context on Android

调试

1、Xamarin.android不能显示网络、远程图片

调试时从IDE的输出可以看出原因:Image load failed: System.ObjectDisposedException: Can not access a closed Stream. 不知这个问题是不是还没有去修复,还是不准备修复

因为看到Mircsoft官方示例eshop都是用的一个开源包:https://github.com/luberda-molinet/FFImageLoading

注意:各个平台需要调用: CachedImageRenderer.Init(false);   【上述github有使用方法】

否则 会报错:

"Please call CachedImageRenderer.Init method in a platform specific project to use FFImageLoading!"

2、Can't install because provider name com.xxx.fileprovider (in package yyy) is already used by com.mesince]

这个问题其实本质就是手机里已经安装有同名的Provider的APK了.

比如我在甲APP(com.xxx)中的AndroidManifest.xml中定义了一个Provider,
安装完这个甲APP,
我把代码里的ApplicationId改成com.yyy,即换皮成乙APP(com.yyy) ,
此时如果没有把Providerandroid:authorities的属性也换掉,
安装乙APP到手机上,provider就会和甲APP的冲突.

需要修改项目中的配置文件:AndroidManifest.xml,可以改为如下

android:authorities= ${applicationId}.provider

参考:[Android] 该文件包与具有同一名称的现有文件包存在冲突

3、Android http 不能联网:Cleartext HTTP traffic to not permitted

在尝试 请求外部的WebApi时,报出错误。

解决:在AndroidManifest.xml配置文件的<application>标签中插入:   

android:usesCleartextTraffic="true"

4、Android模拟机时间修改

没做任何修改的前提下,其时间是美国纽约的时区,相对中国是-8小时的。所以程序中DateTime.Now获取的比中国时间小8小时

可以自己修改为和中国一样。

本来想设置 图中1处的时区,但是发现没有中国的。于是直接改图中2处的时间。

参考:安卓模拟器怎么设置时间日期

5、listView.ScrollTo不生效

需要看下滚动的代码是否有UI线程执行的

txtMessage.Focused += TxtMessage_Focused;

private void TxtMessage_Focused(object sender, FocusEventArgs e)
{
if (listChatMessage.Count > )
{
Task.Delay().ContinueWith((t) =>
{
Device.BeginInvokeOnMainThread(() =>
{
listView.ScrollTo(listChatMessage.Last(), ScrollToPosition.End, false);
});
});
}
}

参考:xamarin优化listView.ScrollTo

6、not attached to window manager

not attached to window manager有许多场景发生。最近在做设备锁时,弹出进度圈和取消时碰到此问题

调试判断出大概是Activity 已经销毁了,再调Dismiss时失败,,【泄露】

最终修改代码,发现确实是开启的dialog在Activity销毁之前,没有关闭。。然后在Activity销毁了再去dismiss。

7、Unable to add window -- token android.os.BinderProxy@b1bab0a is not valid; is your activity running?

最近在做设备锁时,需要弹窗的地方碰到此问题

问题:Activity不是处于运行状态

调试查看报错处的Activity是哪个,代码中写的是Activity context = (Activity)Forms.Context;

System.Console.WriteLine(TAG + context.LocalClassName);
发现此Activity调用了OnDestroy()马上就销毁了,所以他不是在运行中。。

修改Activity的赋值:Activity activity = MainActivity.Instance;

8、net::ERR_CLEARTEXT_NOT_PERMITTED

在安卓9.0中调试WebView加载网页时错误。

解决方法: 在AndroidManifest文件中的节点Application中加入 android:usesCleartextTraffic="true"

9、Xamarin.forms包加入不进

在迁移一个项目后,Xamarin.Android中本来有Xamarin.Forms这个包的,但是同事从远程拉取代码后,没有显示此包,导致调试不通过。

报错(17个错误):style attribute 'attr/colorPrimaryDark (aka com.mesince:attr/colorPrimaryDar

在Nuget中引入了 但还是不行。后来尝试 从解决方案中卸载此Xamarin.Android项目,重新添加,居然可以显示了,好奇怪的问题!

Xamarin.Android开发中遇到的问题的更多相关文章

  1. Xamarin.Android 开发中遇到旋转屏幕错误

    错误信息 : System.NotSupportedException: Unable to find the default constructor on type App5.MyFragment. ...

  2. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解

    原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...

  3. [译]:Xamarin.Android开发入门——Hello,Android深入理解

    返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...

  4. [译]:Xamarin.Android开发入门——Hello,Android快速上手

    返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...

  5. Xamarin Android开发实战(上册)大学霸内部资料

    Xamarin Android开发实战(上册)大学霸内部资料   试读文档下载地址:http://pan.baidu.com/s/1jGEHhhO 密码:vcfm 介绍: 本教程是国内唯一的Xamar ...

  6. Xamarin.Android开发实践(五)

    原文:Xamarin.Android开发实践(五) 一.服务的生命周期 服务与活动一样,在它的整个生命周期中存在着一些事件,下图可以很好解释整个过程以及涉及到的方法: 在真实的使用中,Service来 ...

  7. Xamarin.Android开发实践(四)

    原文:Xamarin.Android开发实践(四) Xamarin.Android下获取与解析JSON 一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选 ...

  8. Xamarin.Android开发实践(三)

    原文:Xamarin.Android开发实践(三) 一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没 ...

  9. Xamarin.Android开发实践(二)

    原文:Xamarin.Android开发实践(二) 一.准备 开始学习本教程前必须先完成该教程http://www.cnblogs.com/yaozhenfa/p/xamarin_android_qu ...

随机推荐

  1. PowerBuilder学习笔记之14用户自定义对象

    教程链接:https://wenku.baidu.com/view/9730d1c7aa00b52acec7ca05.html?re=view&rec_flag=default&sxt ...

  2. Java的内存需要划分成为5个部分:

    Java的内存需要划分成为5个部分: 1.栈(Stack):存放的都是方法中的局部变量.方法的运行一定要在栈当中运行. 局部变量:方法的参数,或者是方法{}内部的变量 作用域:一旦超出作用域,立从栈内 ...

  3. 【1】【经典回溯、动态规划、贪心】【leetcode-55】跳跃游戏

    给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4]输出: true解释 ...

  4. JAAS configuration for Kafka clients

    Clients may configure JAAS using the client configuration property sasl.jaas.config or using the sta ...

  5. EF之DataBase添加新表

    由于需要新增的XML数据较多,可以另起项目,将新增的XML数据复制到原来的EF

  6. Appium中app的元素定位

    app定位方式,本文只讲Android手机的定位方式. 前提条件是adb连接到模拟器或者是手机(具体连接方式这里不再讲解),证明已连接到设备 adb devices app元素定位工具一:UI Aut ...

  7. node-exporter常用指标含义,比如在prometheus中查询node_load1的指标数据

    参考: https://blog.csdn.net/yjph83/article/details/84909319 https://www.gitbook.com/book/songjiayang/p ...

  8. [ROR] 如何在mixin模块中定义类方法(Howto define class methods in a mixin module)

    方法一: 修改模块的include方法 module Bbq def self.included(base) base.send :include, InstanceMethods base.exte ...

  9. Python 的 12 个学习方式

    Python 是世界上最受欢迎的编程语言之一,它受到了全世界各地的开发者和创客的欢迎.大多数 Linux 和 MacOS 计算机都预装了某个版本的 Python,现在甚至一些 Windows 计算机供 ...

  10. sweetalert 弹框简单使用

    sweetalert网站 简单使用教程 拷贝文件 放到项目中 使用 页面效果 修改代码应用到事件中 成功删除演示(后台数据也会删除) 作 者:郭楷丰 出 处:https://www.cnblogs.c ...