开发

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. Spring Boot 整合 MyBatis 实现乐观锁和悲观锁

    本文以转账操作为例,实现并测试乐观锁和悲观锁. 完整代码:https://github.com/imcloudfloating/Lock_Demo GitHub Page:http://blog.cl ...

  2. java基础 抽象

    /** * 抽象方法:就是加上abstract关键字,并去掉大括号,分号结束 * 抽象类:抽象方法坐在的类,必须是抽象类.在class前家abstract即可 * * 如何使用抽象类和抽象方法: * ...

  3. String常用使用方法,1.创建string的常用3+1种方式,2.引用类型使用==比较地址值,3.String当中获取相关的常用方法,4.字符串的截取方法,5.String转换常用方法,6.切割字符串----java

    一个知识点使用一个代码块方便查看 1.创建string的常用3+1种方式 /* 创建string的常用3+1种方式 三种构造方法 public String():创建一个空字符串,不含有任何内容: p ...

  4. jQuery常用方法(五)

    一.jQuery中常用方法相关方法参数说明:a.无参,获取值b.参数param,设置值c.参数function(index,oldVal){}回调函数[返回我们所要使用的新值]    回调函数的两个参 ...

  5. android中activity和service是否在同一个进程中

    分两种情况,如果是本地线程,肯定是同一个进程中的, 如果是远程服务,那么activity和service将在不同的进程中的 ----- 非远程服务,和Activity属于同一个进程和线程:而远程服务和 ...

  6. Android Studio 导入 Android 系统模块并编译和调试

    FAQ: AS导入系统模块源码,并且能够编译调试,正常查看java doc ???? Android AOSP基础(五)Android Studio调试系统源码的三种方式http://liuwangs ...

  7. WebApplicationContext初始化的两种方式和获取的三种方式

    原博客地址:http://blog.csdn.net/lmb55/article/details/50510547 接下来以ContextLoaderListener为例,分析它到底做了什么? app ...

  8. 购买了一台阿里云ECS后安装Java项目运行环境

    在docker等虚拟化技术大行其道的今天,我原本也想在我买的ECS服务器里全系使用docker技术,只可惜在我尝试后发现我的ECS配置不够高,整个服务器卡到爆炸,无奈只能使用最原始的方式. 我买的服务 ...

  9. js修改页面标题 title

    如果对你有帮助的话麻烦点个[推荐]~最好还可以follow一下我的GitHub~感谢观看! /* * *添加首页description元数据meta标签 *创建一个meta元素,sName为该meta ...

  10. JVM 理论基础目录(待更新,系列完全写完后会统一整理好)

    参考文档: [1] Java 虚拟机规范(Java SE 8版) [2] 深入理解 Java 虚拟机: JVM 高级特性与最佳实践 周志明 本系列的更新快慢全部随意,介意者请海涵. 一 .JVM 入门 ...