мне нужно сделать что -то действительно простое < /p>
Я должен добавить файл json в APK < /p>
Подписанный APK хранится в контейнере Azure Blob < /p>
Модификация APK происходит в .net с использованием Apktool и Apksigner < /p>
, но и APK, но Apk, но и APK, но APK, но Apk, но и APK, но и APK, но APK, но и APK, но APK, но и APK, но APK, но и APK, но и APK, но APK, но и APK. APK становится недействительным на устройстве Android < /p>
Теперь я застрял < /p>
Вот код для изменения уже подписанного APK < /p>
public static async Task ModifyAndResignApk(byte[] apkBytes, string appId, string groupId)
{
var result = new MethodResult();
string apkToolsFolder = Path.Combine(Directory.GetCurrentDirectory(), "Apk Tools");
string apkToolPath = Path.Combine(apkToolsFolder, "apktool.jar");
string apkSignerPath = Path.Combine(apkToolsFolder, "apksigner.bat");
string keystorePath = Path.Combine(apkToolsFolder, "androidKeyStore.keystore");
string tempFolder = Path.Combine(Path.GetTempPath(), "apk_modification_" + Guid.NewGuid());
string extractedApkFolder = Path.Combine(tempFolder, "extracted");
string signedApkPath = Path.Combine(tempFolder, "signed.apk");
string tempApkPath = Path.Combine(tempFolder, "temp.apk");
string unsignedApkPath = Path.Combine(extractedApkFolder, "dist", "unsigned.apk");
string jsonFilePath = Path.Combine(extractedApkFolder, "assets", "config.json");
string keystorePassword = "myPassword";
string keyPassword = "myPassword";
try
{
Directory.CreateDirectory(extractedApkFolder);
await File.WriteAllBytesAsync(tempApkPath, apkBytes);
// Step 1: Decompile APK
if (!await RunProcessAsync("java", $"-jar \"{apkToolPath}\" d \"{tempApkPath}\" -o \"{extractedApkFolder}\" --force"))
throw new Exception("Failed to decompile APK");
// Step 2: Add config.json
Directory.CreateDirectory(Path.GetDirectoryName(jsonFilePath) ?? extractedApkFolder); // Ensure assets folder exists
var config = new { appId, groupId };
string jsonContent = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true });
await File.WriteAllTextAsync(jsonFilePath, jsonContent);
// Step 3: Rebuild APK
if (!await RunProcessAsync("java", $"-Xmx1024M -jar \"{apkToolPath}\" b \"{extractedApkFolder}\" -o \"{unsignedApkPath}\""))
throw new Exception("Failed to rebuild APK");
// Step 4: Sign the APK
if (!await RunProcessAsync(apkSignerPath, $"sign --ks \"{keystorePath}\" --ks-pass pass:{keystorePassword} --key-pass pass:{keyPassword} --out \"{signedApkPath}\" \"{unsignedApkPath}\""))
throw new Exception("Failed to sign APK");
return result.Success(await File.ReadAllBytesAsync(signedApkPath));
}
catch (Exception e)
{
return result.Fail(e, "Failed to modify and resign APK");
}
finally
{
await Task.Delay(500); // Ensure no lingering file locks
if (Directory.Exists(tempFolder))
{
Directory.Delete(tempFolder, true);
}
}
}
private static async Task RunProcessAsync(string fileName, string arguments)
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = fileName,
Arguments = arguments,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
await process.WaitForExitAsync();
string output = await process.StandardOutput.ReadToEndAsync();
string error = await process.StandardError.ReadToEndAsync();
Console.WriteLine(output);
if (!string.IsNullOrWhiteSpace(error))
Console.WriteLine($"Error: {error}");
return process.ExitCode == 0;
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... apk-in-net
Как изменить APK в .net ⇐ Android
Форум для тех, кто программирует под Android
1741343852
Anonymous
мне нужно сделать что -то действительно простое < /p>
Я должен добавить файл json в APK < /p>
Подписанный APK хранится в контейнере Azure Blob < /p>
Модификация APK происходит в .net с использованием Apktool и Apksigner < /p>
, но и APK, но Apk, но и APK, но APK, но Apk, но и APK, но и APK, но APK, но и APK, но APK, но и APK, но APK, но и APK, но и APK, но APK, но и APK. APK становится недействительным на устройстве Android < /p>
Теперь я застрял < /p>
Вот код для изменения уже подписанного APK < /p>
public static async Task ModifyAndResignApk(byte[] apkBytes, string appId, string groupId)
{
var result = new MethodResult();
string apkToolsFolder = Path.Combine(Directory.GetCurrentDirectory(), "Apk Tools");
string apkToolPath = Path.Combine(apkToolsFolder, "apktool.jar");
string apkSignerPath = Path.Combine(apkToolsFolder, "apksigner.bat");
string keystorePath = Path.Combine(apkToolsFolder, "androidKeyStore.keystore");
string tempFolder = Path.Combine(Path.GetTempPath(), "apk_modification_" + Guid.NewGuid());
string extractedApkFolder = Path.Combine(tempFolder, "extracted");
string signedApkPath = Path.Combine(tempFolder, "signed.apk");
string tempApkPath = Path.Combine(tempFolder, "temp.apk");
string unsignedApkPath = Path.Combine(extractedApkFolder, "dist", "unsigned.apk");
string jsonFilePath = Path.Combine(extractedApkFolder, "assets", "config.json");
string keystorePassword = "myPassword";
string keyPassword = "myPassword";
try
{
Directory.CreateDirectory(extractedApkFolder);
await File.WriteAllBytesAsync(tempApkPath, apkBytes);
// Step 1: Decompile APK
if (!await RunProcessAsync("java", $"-jar \"{apkToolPath}\" d \"{tempApkPath}\" -o \"{extractedApkFolder}\" --force"))
throw new Exception("Failed to decompile APK");
// Step 2: Add config.json
Directory.CreateDirectory(Path.GetDirectoryName(jsonFilePath) ?? extractedApkFolder); // Ensure assets folder exists
var config = new { appId, groupId };
string jsonContent = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true });
await File.WriteAllTextAsync(jsonFilePath, jsonContent);
// Step 3: Rebuild APK
if (!await RunProcessAsync("java", $"-Xmx1024M -jar \"{apkToolPath}\" b \"{extractedApkFolder}\" -o \"{unsignedApkPath}\""))
throw new Exception("Failed to rebuild APK");
// Step 4: Sign the APK
if (!await RunProcessAsync(apkSignerPath, $"sign --ks \"{keystorePath}\" --ks-pass pass:{keystorePassword} --key-pass pass:{keyPassword} --out \"{signedApkPath}\" \"{unsignedApkPath}\""))
throw new Exception("Failed to sign APK");
return result.Success(await File.ReadAllBytesAsync(signedApkPath));
}
catch (Exception e)
{
return result.Fail(e, "Failed to modify and resign APK");
}
finally
{
await Task.Delay(500); // Ensure no lingering file locks
if (Directory.Exists(tempFolder))
{
Directory.Delete(tempFolder, true);
}
}
}
private static async Task RunProcessAsync(string fileName, string arguments)
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = fileName,
Arguments = arguments,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
await process.WaitForExitAsync();
string output = await process.StandardOutput.ReadToEndAsync();
string error = await process.StandardError.ReadToEndAsync();
Console.WriteLine(output);
if (!string.IsNullOrWhiteSpace(error))
Console.WriteLine($"Error: {error}");
return process.ExitCode == 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79491933/how-to-modify-apk-in-net[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия