app在线更新

This commit is contained in:
snltty
2025-04-26 22:59:58 +08:00
parent 595d921864
commit 8af5a1ca01
7 changed files with 104 additions and 15 deletions

View File

@@ -16,6 +16,15 @@
android:icon="@mipmap/appicon"
android:supportsRtl="true" android:usesCleartextTraffic="true">
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<service
android:name="com.snltty.linker.app.VpnServiceLinker"
android:exported="false"
@@ -32,4 +41,6 @@
</intent-filter>
</service>
</application>
</manifest>

View File

@@ -9,7 +9,6 @@ using AndroidX.Core.App;
using AndroidX.Core.Content;
using AndroidX.Core.View;
using Java.IO;
using Java.Nio.Channels;
using linker.app.Services;
using linker.libs;
using linker.libs.extends;
@@ -534,13 +533,71 @@ namespace linker.app
public override async Task Install(Action<long, long> processs)
{
await MainThread.InvokeOnMainThreadAsync(async () =>
{
await RequestRequiredPermissions(Platform.CurrentActivity);
await InstallApk(Platform.CurrentActivity);
processs(100, 100);
await Task.CompletedTask;
});
}
public override void Clear()
{
}
private async Task InstallApk(Context context)
{
await MainThread.InvokeOnMainThreadAsync(() =>
{
var file = new Java.IO.File(Path.Join(FileSystem.Current.AppDataDirectory, "linker.apk"));
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
// Android 7.0及以上版本需要使用FileProvider
var apkUri = AndroidX.Core.Content.FileProvider.GetUriForFile(context,
$"{context.ApplicationContext.PackageName}.fileprovider", file);
var installIntent = new Intent(Intent.ActionInstallPackage);
installIntent.SetDataAndType(apkUri, "application/vnd.android.package-archive");
installIntent.AddFlags(ActivityFlags.GrantReadUriPermission);
installIntent.AddFlags(ActivityFlags.NewTask);
context.StartActivity(installIntent);
}
else
{
// 传统安装方式
var apkUri = Android.Net.Uri.FromFile(file);
var installIntent = new Intent(Intent.ActionView);
installIntent.SetDataAndType(apkUri, "application/vnd.android.package-archive");
installIntent.SetFlags(ActivityFlags.NewTask);
context.StartActivity(installIntent);
}
});
}
private async Task<bool> RequestRequiredPermissions(Context context)
{
return await MainThread.InvokeOnMainThreadAsync(async () =>
{
// 检查并请求存储权限
var status = await Permissions.CheckStatusAsync<Permissions.StorageWrite>();
if (status != PermissionStatus.Granted)
{
status = await Permissions.RequestAsync<Permissions.StorageWrite>();
if (status != PermissionStatus.Granted)
return false;
}
// 检查安装未知应用权限针对Android 8.0+
if (Build.VERSION.SdkInt >= BuildVersionCodes.O && !context.PackageManager.CanRequestPackageInstalls())
{
var intent = new Intent(Android.Provider.Settings.ActionManageUnknownAppSources)
.SetData(Android.Net.Uri.Parse($"package:{context.PackageName}"));
context.StartActivity(intent);
return false;
}
return true;
});
}
}
}

View File

@@ -0,0 +1,4 @@
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 指向应用的私有文件目录 -->
<files-path name="private_files" path="." />
</paths>

View File

@@ -153,6 +153,7 @@ namespace linker.messenger.updater
public async Task Subscribe(ApiControllerParamsInfo param)
{
updaterTransfer.Subscribe();
await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = signInClientState.Connection,

View File

@@ -2,7 +2,6 @@
using System.Collections.Concurrent;
using linker.messenger.signin;
using linker.libs.timer;
using linker.libs.extends;
namespace linker.messenger.updater
{
@@ -67,6 +66,8 @@ namespace linker.messenger.updater
}
}
public void Update(UpdaterInfo info)
{
if (string.IsNullOrWhiteSpace(info.MachineId) == false)
{
UpdaterInfo170 _info = new UpdaterInfo170
{
@@ -76,8 +77,6 @@ namespace linker.messenger.updater
Current = info.Current,
MachineId = info.MachineId
};
if (string.IsNullOrWhiteSpace(_info.MachineId) == false)
{
updateInfos.AddOrUpdate(_info.MachineId, _info, (a, b) => _info);
Version.Increment();
}
@@ -104,6 +103,16 @@ namespace linker.messenger.updater
updateInfo.Update();
}
}
public void Subscribe()
{
if(updateInfo.Status == UpdaterStatus.Downloading || updateInfo.Status == UpdaterStatus.Extracting)
{
updateInfo.MachineId = signInClientStore.Id;
Update(updateInfo);
Version.Increment();
}
}
private void UpdateTask()
{
TimerHelper.SetIntervalLong(async () =>
@@ -134,7 +143,7 @@ namespace linker.messenger.updater
}
Update(updateInfo);
}
}, () => lastTicksManager.DiffLessEqual(5000) ? 1000 : 15000);
}, () => lastTicksManager.DiffLessEqual(5000) ? 3000 : 15000);
}

View File

@@ -74,6 +74,13 @@ namespace linker.messenger.updater
return;
}
try
{
File.Delete(savePath);
}
catch (Exception)
{
}
LoggerHelper.Instance.Warning($"updater {url}");
using HttpClient httpClient = new HttpClient();

View File

@@ -1,5 +1,5 @@
v1.7.5
2025-04-26 19:35:50
2025-04-26 22:59:58
1. 一些优化
2. 安卓APP勉强能用
3. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它