Xamarin.Android开发及常见问题的解决

原创 2015年01月07日 16:39:42

一、Xamarin.Android开发环境的搭建


(一)所需组件

1.VS2013(VS2010以上即可)
2.JDK(http://www.oracle.com/technetwork/java/javase/downloads/index.html)
3.Android SDK及NDK(http://developer.android.com/sdk )
4.gtk-sharp(http://www.mono-project.com/download/#download-win)
5.Xamarin VisualStudio

(二)搭建环境两种可选方案

       搭建开发环境可以使用Xamarin官网上的在线安装文件来安装,下载地址:http://xamarin.com/download,也可以选择自己手动安装。在线安装为傻瓜式安装,就不解释了(唯一缺点是下载速度奇慢)。来说下手动安装过程。

(三)安装顺序

1.安装Java SDK(jdk),这是虚拟机运行的基本条件
2.安装Android SDK后运行并下载各个版本的Android SDK
3.使用avd Manager工具(在Android SDK同级目录下可以找到)来新建一个模拟器(如果使用真机测试,可以不用新建模拟器)
4.安装gtk-sharp
5.安装Xamarin VisualStudio,该文件为VS的插件,用来添加Xamarin的项目模板
6.设置VS2013开发环境里的Android SDK及NDK路径

至此,环境搭建完成!

二、常见问题的解决方案

(一)开发环境无法发现模拟器或真机

       这种情况90%是adb被占用的问题,adb的tcp默认是5037,导致android设备与5037端口绑定失败的原因有很多,比如不要安装360、91助手等任何能连接手机的应用,他们会占用该tcp5037。
我们来输入命令来进一步确定,在cmd命令台输入“adb start-server”后如果输出了:
adb server is out of date. killing...
ADB server didn't ACK
* failed to start daemon *

那么可以确定adb的端口是被别的进程占用了,这时候,我们再来输入命令:
netstat -ano | findstr "5037"
回车后会有类似这样的反馈:
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 4236
TCP 127.0.0.1:5037 127.0.0.1:49422 ESTABLISHED 4236
TCP 127.0.0.1:49422 127.0.0.1:5037 ESTABLISHED 3840
这时候我们打开任务管理器,把pid为4236的进程干掉。

(二)开发环境提示“vs正忙...”

        开发环境一旦出现了这样的提示,请不要继续傻傻的等它忙完,它也不会告诉你它到底在忙些什么,唯一能确定的是,它永远忙不完。你还是直接启动任务管理器来结束它,再重新开始,所以我们做开发一定要记得时刻不停的按“control+s”,至少开发Xamarin.Android要把它当回事儿。

(三)双击axml文件后,开发环境死掉

这是Xamarin.Android插件的问题,要么你可以换一种打开方式来编写布局文件

要么你可以选择升级你的Xamarin插件


(四)出现代码不正确的执行

做Xamarin.Android开发,经常会遇到很多难以解释的现象,如果出现了类似于:
bool b = false;
if (b == true){
     //do something...
}
这样的代码,如果还是会执行do something,请自觉的把你的解决方案清理后,重启,这大多是编译器的错误,他会记录你的断点位置,以及监视变量的值,他出了问题,你最好重启吧。



三、调试及部署解决方案

(一)一个断点拦不住

       经常会出现打了断点,但是调试期间却没有停下来,也无法监视变量。遇到这样的问题我们需要在连续的地方打上两个断点,两个以上(包括两个)的断点才能拦住它!如下图,要监视变量c,我们打断点需要这样打两个!切记!
             

(二)部署(发布app)

        电子签名是指数据电文中以电子形式所含、所附用于识别签名人身份并表明签名人认可其中内容的数据。通俗点说,电子签名就是通过密码技术对电子文档的电子形式的签名,并非是书面签名的数字图像化,它类似于手写签名或印章,也可以说它就是电子印章。很多杀毒软件会把其当做一个鉴别软件安全与否的首要标准。一个完善的可运行应用都要有电子签名,在android签名时需要使用keytool来签名,需要提供版本号、密钥、公司名称、所属地区等资料。在vs中省去了dos界面的命令行,只需要在发布android app的时候填写资料,点击“Next”即可!
        首先我们需要把解决方案配置由Debug版本改为Release版本,再来点击菜单栏中的“工具”==>“pulish Android Application”选项

            

四、Android基础知识汇总


编码注意事项:
android原生开发语言为java,他们的成员以及变量命名采用Camel命名规则,而C#语言采用Pascal命名规则,因此,在看到java代码,想要转换C#代码时,请修改下大小写;另外java中没有属性这一说法,请将obj.setValue()等这类方法在转换时改为obj.Value=”xxx”;而且在java中,没有事件Event这一说,请灵活修改java中的接口。


(一)Android四大组件

Activity、Service、Broadcast Receiver以及Content Provider并称为Android四大组件。

(1)、Activity:活动

注意:
1.生命周期一定要清楚
生命周期:
onCreate ==> onStart ==> onResume ==> onPause ==> onStop ==> onDestroy
            

(2)、Service:服务

注意:
      1.服务中的code默认是运行在主线程中,请新开线程来运行你的code
      2.请尽量使用filter使用startService方法来启动Service
生命周期:
      startService:onCreate ==> onStartCommand ==> onDestroy
      bindService:onCreate ==> onBind ==> onUnbind ==> onDestroy
                     

(3)、Broadcast Receive:广播

       Broadcast Receive为广播接收器,它和事件处理机制类似,只不过事件的处理机制是程序组件级别的,广播处理机制是系统级别的。
       注册广播:(这是一个拦截系统启动完毕的注册方式)

在Xamarin中我们使用一下代码来实现:

[BroadcastReceiver]

[IntentFilter(new string[] { "com.msg.ywq" })]

public class YlPadMsgReceiver : BroadcastReceiver
 {

}

当系统启动后便会执行onReceive()方法,你要做什么,请写在这里。

(4)、Content Provider:内容提供者

       Android中的Contentprovider机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的唯一方式。在android系统中,没有一个公共的内存区域,供多个应用共享存储数据。
       参考地址:http://blog.csdn.net/iceo45683968/article/details/42496867


(二)Android Layout常见布局文件的使用

       小窍门:很多人觉得写布局很烦,写起来太困难,属性太多,其实布局文件理解起来很简单,就把它当做在做css+div布局就行,这样理解起来会对我们写布局有很大的帮助。


常见布局:
LinearLayout:线性布局。分为水平、垂直,设置属性orientation为horizontal或vertical即可。
RelativeLayout:相对布局。几个相对布局会重叠在一起,调整它的位置可使用
layout_above:在xxx之上
layout_below:在xxx之下
layout_alignParentLeft=”true”:设置在父容器的左侧
layout_alignParentRight=”true”:设置在父容器的右侧
layout_toLeftOf:在xxx的左边
layout_toRightOf:在xxx的右边

FrameLayout:层次布局。常用来配合Fragment使用


常见布局属性:
layout_width:设置宽度
layout_height:设置高度
layout_gravity:设置该容器在父容器中的方位,属性值包括有:center、right...
gravity:容器内部文字或元素在该容器中的方位
layout_marginLeft、layout_marginRight、layout_marginTop ...... 不解释
background:背景。可设置十六进制颜色值,也可设置图片
id:设置控件元素的id,是渲染到界面后,取得该控件的方式。


(三)Android 分辨率的调整

1.使用相对屏幕像素密度单位。
2.使用android layout 布局文件做布局,灵活使用fill_parent、wrap_content等属性值,以及灵活使用layout_weight比重属性调整比例。
3.使用draw9path工具调整不规则图片的局域拉伸。
4.使用Context.Resources.DisplayMetrics.Density得到屏幕像素比例,动态调整布局。

(四)adb常用命令

adb pull -从手机中下载文件到电脑上               如:adb pull sdcard/stock.apk C:\\stock.apk
adb push -从电脑中上传文件到手机上             如:adb push C:\\stock.apk sdcard/
adb install -安装软件到手机上                        如:adb install C:\\stock.apk
adb uninstall -卸载手机上的软件                     如:adb uninstall stock.apk
adb device                                                   列出adb已绑定的android设备

五、Android设备兼容性

        Android设备在国内有相当部分厂商修改了内核底层,因此做安卓有个很头疼的问题,就像web应用中常见的问题---兼容性,兼容性是个硬伤!我们开发应用,尽量使用较低版本的sdk来编译,除此之外,谨记:代码一定要规范,切不可投机取巧!为实现一个效果而牺牲了兼容性,倒不如将效果降低,保持功能的正常使用!
       在android设备中,特别是国内的中兴,三星,华为等以及山寨机,经常把android内置的Google服务框架从系统内核中抽掉,这种情况下不能使用Google自带的推送。加之推送服务器为Google的服务器,国内把Google给和谐了,所以在做推送时,建议使用国内第三方推送工具。
       还有一些设备厂商将手机做成了双卡双待,Android SDK中没有获取第二个卡槽信息的api,加之国内通讯运营商对sim卡所做的修改,经常在获取sim信息的时候不成功,甚至报错,这时候一定要加try!
       为了将系统安装包缩小,自带的语音组件,也经常被国内厂商卸载掉,在使用语音的时候也一定要加上try!
       在某些功能块调用时必须使用try,同时切记不可在catch里不做任何处理!还有一个不得不用try的原因,在java 语言的api中,常常会有以下的api,而我们在调用的时候,必须使用try,将其包起,否则编译器都无法通过!
       以下代码是模拟了android api的一个方法,遇到这类api,必须使用try包起来。
public void do1() throws Exception {
     //do something...
     throw new Exception("not implement");
}

六、具有敢于怀疑一切的精神

       没有什么特殊的,记得出了问题后,不要认为something一定是对的,没有什么是绝对的,必须怀疑一切!比如上面提到的代码不正确的执行,如果不敢怀疑,一整天都找不到问题所在!

七、具有网管的精神-重启

       我们必须承认事物没有完美的,况且Xamarin还在进化阶段,有bug是很正常的,不稳定也可以理解。我之前经常遇到VS挂掉、连接模拟器失败,怎么都解决不了、代码不按照正常思维执行、VS自己闪退、视图编辑器打开失败、编译总是失败等等一些问题,经过重启环境更甚至于重启电脑后,一切正常!

php工具调试&Thinkphp;运行流程分析

工具调试的优势&应用场景: 1,审核系统的性能 2,各种疑难杂症 3,掌握系统的运行流程 4,其他很多用途等 课程包括以下内容: 一,开发环境: netbeans8.0+phpstudy 二,调试环境配置起来 三,演示程序调试效果 四,如何使用工具调试 五,全面分析THINKPHP(3.2.3)系统运行流程
  • 2016年11月07日 21:10

Xamarin Android项目运行失败

Xamarin Android项目运行失败
  • u014621518
  • u014621518
  • 2016-07-14 10:52:40
  • 799

vs2017打包安卓项目

第 1 部分 - 做好应用程序发布准备 应用程序经编码和测试后,必须准备一个包进行分发。 准备此包的第一个任务是生成供发布的应用程序,其中主要涉及到设置应用程序的一些属性。 有关较早版本的 Xa...
  • xsfqh
  • xsfqh
  • 2017-08-09 10:53:54
  • 5747

Xamarin For Visual Studio第一坑 - Android SDK版本问题

不多说了,Xamarin对JDK和Android SDK的支持还不到位,跟不上倒也算了,但是Xamarin installer为什么不能搞清楚。。。安装时会包括Android API level 24...
  • silentrock
  • silentrock
  • 2016-07-27 01:24:27
  • 2077

VS2015 Xamarin调试android版本过低修改

VS2015调试andoird程序,在下载程序时候发现出现如下提示错误 Deployment failed because the device does not support the packag...
  • lan120576664
  • lan120576664
  • 2015-01-04 11:01:13
  • 4989

解决新建Xamarin.Forms项目,编译Android项目时出错的问题

在新建Xamarin.Forms项目并进行编译时,可能会出现“Please install package: XXX doesn't exist.”,这是由于缺失m2repository相关文件造成的...
  • li2008kui
  • li2008kui
  • 2016-10-24 18:32:50
  • 1419

Xamarin Android安装教程(2016最新亲测安装版)

vs2015安装xamarin android开发环境主要流程安装好Java的开发环境,也就是装好JDK 安装Xamarin For Windows,通俗点讲就是装Xamarin 下载好Android...
  • kebi007
  • kebi007
  • 2016-10-14 01:41:22
  • 6109

Xamarin.Android 打包Apk

Xamarin.Android发布程序详解
  • super_luo
  • super_luo
  • 2015-02-26 10:27:09
  • 3089

Xamarin.Android使用教程之Android项目结构

Xamarin Platform 试用版下载地址> 今天,我们将带大家一起看看在一个Xamarin.Android应用程序中每一个文件夹是什么意思。我们一起回头看看在上一篇教程中创建的Andro...
  • AABBbaby
  • AABBbaby
  • 2015-10-14 11:15:54
  • 877

Xamarin 中android开发时,axml文件出错。Disconnected from layout renderer

android sdk 版本问题,下载22.3版本即可 Mac: https://dl-ssl.google.com/android/repository/tools_r22.3-macosx.zip...
  • u012069227
  • u012069227
  • 2014-03-21 12:10:32
  • 3309
收藏助手
不良信息举报
您举报文章:Xamarin.Android开发及常见问题的解决
举报原因:
原因补充:

(最多只允许输入30个字)