GeneralUpdate.Avalonia.Android 0.0.1-beta.9

This is a prerelease version of GeneralUpdate.Avalonia.Android.
dotnet add package GeneralUpdate.Avalonia.Android --version 0.0.1-beta.9
                    
NuGet\Install-Package GeneralUpdate.Avalonia.Android -Version 0.0.1-beta.9
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="GeneralUpdate.Avalonia.Android" Version="0.0.1-beta.9" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="GeneralUpdate.Avalonia.Android" Version="0.0.1-beta.9" />
                    
Directory.Packages.props
<PackageReference Include="GeneralUpdate.Avalonia.Android" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add GeneralUpdate.Avalonia.Android --version 0.0.1-beta.9
                    
#r "nuget: GeneralUpdate.Avalonia.Android, 0.0.1-beta.9"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package GeneralUpdate.Avalonia.Android@0.0.1-beta.9
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=GeneralUpdate.Avalonia.Android&version=0.0.1-beta.9&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=GeneralUpdate.Avalonia.Android&version=0.0.1-beta.9&prerelease
                    
Install as a Cake Tool

<p align="center"> <img src="https://raw.githubusercontent.com/GeneralLibrary/GeneralUpdate.Avalonia/main/imgs/banner.png" alt="GeneralUpdate.Avalonia"> </p>

GeneralUpdate.Avalonia.Android

NuGet License

UI-free Android auto-update core library for Avalonia 12+ apps (net10.0-android).


Features

  • No built-in UI — host app owns dialogs, progress bars, and error rendering.
  • Update pipeline orchestration — validate version → resume-download → SHA-256 verify → install.
  • Resumable HTTP download with sidecar metadata and smoothed speed reporting.
  • Replaceable abstractions — every stage is an interface you can swap.
  • Operation serialization — concurrent calls are gated, safe to call from any thread.

Quick Start

dotnet add package GeneralUpdate.Avalonia.Android
using GeneralUpdate.Avalonia.Android;
using GeneralUpdate.Avalonia.Android.Models;

var options = new AndroidUpdateOptions
{
    DownloadDirectoryPath = Path.Combine(
        Android.App.Application.Context.CacheDir!.AbsolutePath!, "update"),
    FileProviderAuthority = "com.example.app.generalupdate.fileprovider"
};

using IAndroidBootstrap bootstrap = GeneralUpdateBootstrap.CreateDefault(options);

var packageInfo = new UpdatePackageInfo
{
    Version     = "2.3.0",
    DownloadUrl = "https://example.com/app-release.apk",
    Sha256      = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
    FileName    = "app-release.apk",
    FileSize    = 52_428_800
};

var check = await bootstrap.ValidateAsync(packageInfo, "2.2.1", ct);
if (check.UpdateFound)
{
    var result = await bootstrap.DownloadAndVerifyAsync(packageInfo, ct);
    if (result.Success && result.FilePath is not null)
    {
        await bootstrap.LaunchInstallerAsync(packageInfo, result.FilePath, ct);
    }
}

API

Static Factory

// GeneralUpdateBootstrap.CreateDefault wires the full default dependency chain:
//   IAndroidContextProvider  → DefaultAndroidContextProvider
//   IAndroidActivityProvider → NullAndroidActivityProvider
//   IUpdateLogger            → NoOpUpdateLogger
//   IFileStorage             → PhysicalFileStorage
//   IUpdateDownloader        → HttpResumableApkDownloader
//   IHashValidator           → Sha256HashValidator
//   IApkInstaller            → AndroidApkInstaller
//   IVersionComparer         → SystemVersionComparer

public static IAndroidBootstrap CreateDefault(
    AndroidUpdateOptions options,
    IAndroidContextProvider? contextProvider = null,
    IAndroidActivityProvider? activityProvider = null,
    HttpClient? httpClient = null,
    IVersionComparer? versionComparer = null,
    IUpdateEventDispatcher? eventDispatcher = null,
    IUpdateLogger? logger = null);

IAndroidBootstrap (implements IDisposable)

Method Description
ValidateAsync(packageInfo, currentVersion, ct) Compare versions, fire AddListenerValidate or AddListenerUpdateFailed, return UpdateCheckResult
DownloadAndVerifyAsync(packageInfo, ct) Resume-download APK, SHA-256 verify, fire progress/completed/failed events, return UpdateOperationResult
LaunchInstallerAsync(packageInfo, apkFilePath, ct) Launch Android ACTION_VIEW intent via FileProvider, return InstallResult
GetSnapshot() Thread-safe snapshot of current (State, FailureReason, Message)
Event Payload
AddListenerValidate ValidateEventArgsPackageInfo, CurrentVersion
AddListenerDownloadProgressChanged DownloadProgressChangedEventArgs — speed, bytes, percentage, status
AddListenerUpdateCompleted UpdateCompletedEventArgsResult (UpdateOperationResult)
AddListenerUpdateFailed UpdateFailedEventArgsResult, FailureReason

Enums

enum UpdateState
{
    None, Checking, UpdateAvailable, Downloading, Verifying,
    ReadyToInstall, Installing, Completed, Failed, Canceled
}

enum UpdateFailureReason
{
    None, NetworkError, Canceled, InvalidMetadata, FileIoError,
    HashMismatch, ServerDoesNotSupportRange, InstallPermissionDenied,
    InstallLaunchFailed, VersionComparisonFailed, Unknown
}

Model Hierarchy

UpdateOperationResult (base record)
├── Success, State, FailureReason, Message, PackageInfo, FilePath, Exception
├── UpdateCheckResult  →  + UpdateFound, CurrentVersion, TargetVersion
├── DownloadResult
├── HashValidationResult  →  + ActualSha256, ExpectedSha256
└── InstallResult

Other models: AndroidUpdateOptions, DownloadProgressInfo, DownloadResumeMetadata, UpdatePackageInfo, UpdateStateSnapshot.

Android FileProvider Setup

Add to AndroidManifest.xml:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.example.app.generalupdate.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/generalupdate_file_paths" />
</provider>

Resources/xml/generalupdate_file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <cache-path name="update_cache" path="update/" />
    <files-path name="update_files" path="update/" />
</paths>

Project Structure

src/GeneralUpdate.Avalonia.Android
├── Abstractions/         # 9 interfaces: IAndroidBootstrap, IApkInstaller, IFileStorage, …
├── Enums/                # UpdateState, UpdateFailureReason
├── Events/               # 4 event arg types
├── Models/               # 10 model records
├── Services/             # 9 default implementations
├── GeneralUpdateBootstrap.cs   # Static factory
└── GeneralUpdate.Avalonia.Android.csproj

License

Apache License 2.0 — see LICENSE.


Other languages: English | 中文

Product Compatible and additional computed target framework versions.
.NET net10.0-android36.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.0.1-beta.9 55 6/13/2026
0.0.1-beta.8 48 6/13/2026
0.0.1-beta.7 51 6/13/2026