[Xamarin.Android]文档阅读笔记。

  • Get Started
    • Setup and Installation
      • Windows Installation
        • Overview(过)

        • Installation(过)

        • Configuration

          • 建构应用需要用到JDK和Android SDK
            • VS中可通过Tools > Options > Xamarin > Android Settings查看设置
          • 基于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

            • 可以真实的安卓设备
        • 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 Device Setup
        • (过)
      • Microsoft Mobile OpenJDK Preview
        • 讲述JDK升级方面的事
    • Hello, Android
    • Hello, Android Multiscreen(略)
    • Xamarin for Java Developers
      • 对比了一下C#和Java
  • Deployment and Testing
    • Publlishing an App
      • Publishing to Google Play
        • Publishing to Google Play
          • Requirements

            • 必须创建一个开发者账号,一次性缴费25刀
            • 所有的应用必须以加密密钥签名,签名有效期必须在2033-10-22之后
            • APK大小限制在100MB
          • Becoming a Publisher

            • 必须有个发布者账号
            • Preparing Promotional Assets

              • 可上传推销/促售资料
              • Launcher Icons

                • 32位PNG带alpha通道
                • 尺寸分ldpi、mdpi、hdpi、xhdpi
              • High Resolution Application Icons

              • 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
                • 30秒到2分钟介绍
            • Publishing to Google Play

        • APK Expansion Files
          • APK文件大小存在限制
            • 现为100MB
          • 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

  • 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运行时
      • Android Callable Wrappers

        • 是一个JNI洽桥,用于调用托管的代码
      • Managed Callable Wrappers

        • 是一个JNI洽桥,用于调用安卓平台方法
        • 每个MCW持有一个Java全局引用,可以通过Android.Runtime.IJavaObject.Handle获取
          • 全局引用是有限资源,仿真器只允许2000个,大部分硬件支持超过52000个
      • Managed Callable Wrapper Subclasses

        • (过)
      • Application Startup

    • 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根尖
      • (剩余略)
    • Limitations