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" />
<PackageReference Include="GeneralUpdate.Avalonia.Android" />
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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#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
#tool nuget:?package=GeneralUpdate.Avalonia.Android&version=0.0.1-beta.9&prerelease
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
<p align="center"> <img src="https://raw.githubusercontent.com/GeneralLibrary/GeneralUpdate.Avalonia/main/imgs/banner.png" alt="GeneralUpdate.Avalonia"> </p>
GeneralUpdate.Avalonia.Android
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 |
ValidateEventArgs — PackageInfo, CurrentVersion |
AddListenerDownloadProgressChanged |
DownloadProgressChangedEventArgs — speed, bytes, percentage, status |
AddListenerUpdateCompleted |
UpdateCompletedEventArgs — Result (UpdateOperationResult) |
AddListenerUpdateFailed |
UpdateFailedEventArgs — Result, 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.
| Product | Versions 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.
-
net10.0-android36.0
- Xamarin.AndroidX.Core (>= 1.13.1.2)
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 |