[Xamarin.Android]文档阅读笔记。
- Get Started
- Setup and Installation
- Windows Installation
-
Overview(过)
-
Installation(过)
-
Configuration
- 建构应用需要用到JDK和Android SDK
- VS中可通过
Tools > Options > Xamarin > Android Settings
查看设置
- VS中可通过
- 基于JDK11,这是API31开始的要求;API级别24到30要求JDK8
- XA不支持JDK9
-
Android SDK Manager
Tools > Android > Android SDK Manager
可以用于安装辅料- 此工具在VS中默认会安装
- 更新的辅料可能需要通过
Xamarin Android SDK Manager plugin for Visual Studio
安装
-
Windows 11 Subsystem for Android (Preview)
- 此模式的限制
- 不支持Google Play Services
- 断点停留太久的话,程序会崩
- 此模式的限制
-
Android Emulator
- 仿真用到下列组件
- Google Android Emulator,基于QEMU
- 仿真器影图,对于被仿真的硬件的描述,相当于一个模板
- Android Virtual Device (AVD),从仿真器影图创建出来的
- 加速技术
- Hyper-V
- HAXM
- 仿真用到下列组件
-
Android Device
- 可以真实的安卓设备
- 建构应用需要用到JDK和Android SDK
-
Create an Application(略)
-
Summary(略)
-
- Android SDK Setup
-
Overview
- Xamarin Android SDK Manager包含在VS以及VS for Mac
-
SDK Manager
Tools > Android > Android SDK Manager
-
Android SDK location
- 可以改变SDK的位置
- 默认情况下Android SDK Manager 从微软管理的仓库下载平台组件和工具
- 可以选择从Google处下载未受微软支持的工具
-
- Android Emulator Setup
- Android Emulator Setup
-
Overview
- 安卓仿真器可以不同不同的配置,每个都当为一个虚拟设备
-
- Hardware Acceleration (Hyper-V & HAXM
- (略)
- Device Manager
- (过)
- Device Properties
- (过)
- Troubleshooting
- Android Emulator Setup
- Android Device Setup
- (过)
- Microsoft Mobile OpenJDK Preview
- 讲述JDK升级方面的事
- Windows Installation
- Hello, Android
- Part 1: Quickstart
- 所以,XA支持使用.axml,而不是用XAMl。
- Part 2: Deep Dive
- (略)
- Part 1: Quickstart
- Hello, Android Multiscreen(略)
- Xamarin for Java Developers
- 对比了一下C#和Java
- Setup and Installation
- Deployment and Testing
- Publlishing an App
- Publishing to Google Play
- Publishing to Google Play
-
Requirements
- 必须创建一个开发者账号,一次性缴费25刀
- 所有的应用必须以加密密钥签名,签名有效期必须在2033-10-22之后
- APK大小限制在100MB
-
Becoming a Publisher
- 必须有个发布者账号
- 访问https://play.google.com/apps/publish
- 输入基本信息
- 赞同协议
- 支付25刀
- 验证邮箱
-
Preparing Promotional Assets
- 可上传推销/促售资料
-
Launcher Icons
- 32位PNG带alpha通道
- 尺寸分ldpi、mdpi、hdpi、xhdpi
-
High Resolution Application Icons
- 32位PNG到alpha通道
- 512像素见方
- 最大1024KB
- 可以用https://romannurik.github.io/AndroidAssetStudio/生成
-
Screenshots
- 24位PNG或JPG,无alpha通道
- 320wx480h、480w x 800h、480wx854h
-
Promotional Graphic
- 180w x 120h 24位PNG或JPG
-
Feature Graphic
- 1024w x 500h 24位PNG或JPG
- 框架位924x500
-
Video Link
- 30秒到2分钟介绍
-
Publishing to Google Play
- 必须有个发布者账号
-
- APK Expansion Files
- APK文件大小存在限制
- 现为100MB
- APK外可额外提供两个扩展文件
- 随APK一起下载,保存至共享存储位置
- 一些老旧设备,可能不会随APK下载
- 随APK一起下载,保存至共享存储位置
- 扩展文件被当作obb,可以大至2GB
- 主扩展文件,用于承载较少更新的内容
- 补丁扩展文件,用于对主扩展进行更新
- 扩展文件不能再APK之外单独升级
-
Expansion File Storage
- 下载位置:
shared-store/Android/obb/package-name
- shared-store由Android.OS.Environment.ExternalStorageDirectory给出
- package-name,java料包名
- 下载后,如果被改动,会重新下载
-
FileName Format
- 形如
[main|patch].<expansion-version>.<package-name>.obb
<expansion-version>
与APK的versionCode对应
- 形如
- 下载位置:
-
Download Process
- 如果不存在的话,应用需要下载之(过程略)
-
Architectural Overview
- google创建了几个Java库来辅助:
- Downloader Library
- License Verification Library (LVL)
- APK Expansion Zip Library (optional)
- 上述类库移植到了C#,可以从https://github.com/mattleibow/Android.Play.ExpansionLibrary获取
- google创建了几个Java库来辅助:
- APK文件大小存在限制
- Publishing to Google Play
- Publishing to Google Play
- Publlishing an App
- Advanced Concepts and Internals
- Architecture
- Mono运行时与安卓运行时ART肩并肩运行在Linux内核之上,各提供不同的API
- Mono运行时由C语言写成
- 可以使用System、System.IO、System.Net等类库来访问LInux操作系统设施
- 但是Audio、Graphics、OpenGL、Telephony这些ART功能,无法直接在原生程序中使用
- 所以要做一些从Mono到ART的桥接
-
Application Packages
- 应用封包采用的是ZIP格式,以.apk为扩展名,Xamarin添加了以下内容
- 盛放装配件的assemblies目录
- 注意,采用发布建构时,Assembly.Location和Assembly.CodeBase可能不可靠
- 要包含面向不同架构的Mono运行时
- 盛放装配件的assemblies目录
- 应用封包采用的是ZIP格式,以.apk为扩展名,Xamarin添加了以下内容
-
Android Callable Wrappers
- 是一个JNI洽桥,用于调用托管的代码
-
Managed Callable Wrappers
- 是一个JNI洽桥,用于调用安卓平台方法
- 每个MCW持有一个Java全局引用,可以通过Android.Runtime.IJavaObject.Handle获取
- 全局引用是有限资源,仿真器只允许2000个,大部分硬件支持超过52000个
-
Managed Callable Wrapper Subclasses
- (过)
-
Application Startup
- Mono运行时与安卓运行时ART肩并肩运行在Linux内核之上,各提供不同的API
- Garbage Collection
- 采用的是Mono的https://www.mono-project.com/docs/advanced/garbage-collector/sgen/,有两次代
- 小收集,可通过
GC.Collect(0)
触发 - 大收集,可通过
GC.Collect()
触发
- 小收集,可通过
-
Cross-VM Object Collections
- 对象类型主要分三种:
- 托管对象,由前述GC收集
- Java对象,由安卓GC收集
- Peer对象,实现了IJavaObject,有托管部分和原生部分
- 原生部分有两种
- Framework peers,不知Xamarin的普通Java类型,
- User peers: Android Callable Wrappers,建构时生成的
- JNI全局引用会被当做一个GC根尖
- 对象类型主要分三种:
- (剩余略)
- 采用的是Mono的https://www.mono-project.com/docs/advanced/garbage-collector/sgen/,有两次代
- Limitations
- (过) [Xamarin.Android]: https://learn.microsoft.com/en-us/xamarin/android/
- Architecture