如何在 Jetbrains Rider 中构建 Android APK

     2023-03-30     230

关键词:

【中文标题】如何在 Jetbrains Rider 中构建 Android APK【英文标题】:How to build Android APK in Jetbrains Rider 【发布时间】:2019-12-17 14:39:47 【问题描述】:

我在 Rider IDE 中找不到从 xamarin 项目构建 apk 的选项。谢谢

【问题讨论】:

右键单击解决方案资源管理器中的项目节点,然后“存档以供发布”? 2019.3可用 【参考方案1】:

不可能直接(或者可能在2019.3,我还没有更新),但就生产发布版本而言,具有一致/自动更新的内部版本号,zip对齐和签名的apk,您可以使用额外的工具,例如 cake,它可以利用 MSBuild 并处理增加内部版本号、清理/恢复块包、在 apk 中构建/签名/ZipAlign、运行测试、将 apk 上传到您的服务器/google 的所有过程。

这是一个这样的蛋糕文件的例子:

#addin "Cake.AndroidAppManifest"
#addin nuget:?package=Cake.Git
#tool nuget:?package=NUnit.ConsoleRunner&version=3.9.0


var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");
var SolutionFile = "../MyProject.sln"; 
var projectToBuild = "./MyProject.Droid.csproj";
var buildDir = Directory("./bin") + Directory(configuration);
var objDir = Directory("./obj") + Directory(configuration);

var pkg = "com.organisation.app";
var AndroidSDK = "/Users/Me/Library/Developer/Xamarin/android-sdk-macosx";
var AndroidBuildToolsVersion = "28.0.3";
int rc = 0;

// the build number will be set to the commit number. First commit, bn = 1,...

var buildNumber = GitLog(Directory(".."), int.MaxValue).Count; 

Task("Clean")
    .Does(() =>

    CleanDirectory(buildDir);
    CleanDirectories(objDir);
);

Task("Restore")
    .IsDependentOn("Clean")
    .Does(() =>

    NuGetRestore(SolutionFile);
);

Task("Increase build number")
    .IsDependentOn("Restore")
    .Does(() =>

    var pathToAndroidManifest = "./Properties/AndroidManifest.xml";
    var manifest = DeserializeAppManifest(new FilePath(pathToAndroidManifest));
    manifest.VersionCode = buildNumber;
    SerializeAppManifest(new FilePath(pathToAndroidManifest), manifest);
);

Task("Build")
    .IsDependentOn("Increase build number")
    .Does(() =>

    MSBuild("../MyProject.sln", new MSBuildSettings().SetConfiguration(configuration));
);

Task("Tests")
    .IsDependentOn("Build")
    .Does(() =>

);

Task("package")
    .IsDependentOn("Tests")
    .Does(() =>

    // Creates the initial build of an apk.
    MSBuild(projectToBuild, s => 
        s.SetVerbosity(Verbosity.Quiet);
        s.SetPlatformTarget(PlatformTarget.MSIL);
        s.SetConfiguration(configuration);
        s.WithTarget("SignAndroidPackage");
        s.WithProperty("SolutionDir", "../");
    );
);

Task("zipAlign")
    .IsDependentOn("package")
    .Does(() =>

    Information("Zip-aligning APK");
    rc = StartProcess($"AndroidSDK/build-tools/AndroidBuildToolsVersion/zipalign", new ProcessSettings 
        Arguments = new ProcessArgumentBuilder()
            .Append("-f")
            .Append("-v 4")
            .Append($"buildDir/pkg-Signed.apk")
            .Append($"buildDir/pkg.apk")
    );
    if (rc == 0) 
        Information("APK Zip Alignment succeeded.");
     else  
        var msg = "APK Zip Alignment failure.";
        throw new Exception(msg); 
    
);

Task("Signing")
    .IsDependentOn("zipAlign")
    .Does(() =>

    var keystore = $"../keystore/release.keystore";
    var pass = "*********";

    Information("Signing apk...");
    rc = StartProcess($"AndroidSDK/build-tools/AndroidBuildToolsVersion/apksigner", new ProcessSettings 
        Arguments = new ProcessArgumentBuilder()
            .Append("sign")
            .Append("--ks")
            .Append(keystore)
            .Append($"--ks-pass pass:pass")
            .Append($"buildDir/pkg.apk")
    );

    if (rc != 0)  
        var msg = "APK Signing failed.";
        throw new Exception(msg); 
    
);

Task("Tag")
    .IsDependentOn("Signing")
    .Does(() => 
        Information("Adding a github tag with the build number");
        GitTag(Directory(".."), $"buildNumber");
    );

Task("Publish")
    .IsDependentOn("Tag")
    .Does(() =>

    Information("Publishing with FastLane");
    var jsonFile = $"../keystore/apiKey.json";
    var apk = $"buildDir/pkg.apk";

    Information("Publishing to google play with fastlane supply");

    rc = StartProcess("fastlane", new ProcessSettings 
        Arguments = new ProcessArgumentBuilder()
            .Append("supply")
            .Append("--json_key")
            .Append(jsonFile)
            .Append("--package_name")
            .Append(pkg)
            .Append("--apk")
            .Append(apk)
            .Append("--track")
            .Append("beta")
    );
);

Task("Default")
    .IsDependentOn("Publish");

RunTarget(target);

【讨论】:

Jetbrains Rider:[MSB4057] 项目中不存在目标“构建”

】JetbrainsRider:[MSB4057]项目中不存在目标“构建”【英文标题】:JetbrainsRider:[MSB4057]Thetarget"build"doesnotexistintheproject【发布时间】:2017-04-2822:00:12【问题描述】:当我在JetbrainsRiderEAP21中创建解决方案时,我在解决方案资源... 查看详情

如何在 JetBrains Rider 中添加 C# 解决方案文件?

】如何在JetBrainsRider中添加C#解决方案文件?【英文标题】:HowdoIaddaC#solutionfileinJetBrainsRider?【发布时间】:2018-12-1319:49:36【问题描述】:在Rider中,如果我打开一个包含单个.csproj文件的文件夹,如何添加解决方案?有没有一种方... 查看详情

如何在 JetBrains Rider 中添加/使用 C# 库?

】如何在JetBrainsRider中添加/使用C#库?【英文标题】:Howtoadd/useC#librariesinJetBrainsRider?【发布时间】:2018-05-2200:37:36【问题描述】:我正在尝试使用HttpClient客户端,但是我无法使用usingSystem.Net.Http;。如何在JetBrainsRider中正确使用C#... 查看详情

如何在 Jetbrains Rider 工具箱中添加 Guna UI?

】如何在JetbrainsRider工具箱中添加GunaUI?【英文标题】:HowdoIaddGunaUIintheJetbrainsRidertoolbox?【发布时间】:2021-07-0215:30:20【问题描述】:我从NuGet获得了GunaUI,但无法将其添加到JetbrainsRider工具箱中。我只能在不需要添加它的VisualStu... 查看详情

如何在 JetBrains Rider 中修改“双选”代码的背景颜色?

】如何在JetBrainsRider中修改“双选”代码的背景颜色?【英文标题】:Howtomodifythe"DoubleSelected"code\'sbackgroundcolorinJetBrainsRider?【发布时间】:2021-11-1205:51:16【问题描述】:跟着img,我在里面双击了“test1”vartest1=decimal.MaxValue... 查看详情

如何在 JetBrains Rider 设置中启用“隐式评估”?

】如何在JetBrainsRider设置中启用“隐式评估”?【英文标题】:HowcanIenable"implicitevaluation"intheJetBrainsRidersettings?【发布时间】:2018-02-1521:30:53【问题描述】:JetBrainsRider不会自动为我的手表赋予新价值。相反,我必须在每一... 查看详情

如何在 Jetbrains Rider 2018.1 中强制执行 LF 行结尾

】如何在JetbrainsRider2018.1中强制执行LF行结尾【英文标题】:HowdoIenforceLFlineendingsinJetbrainsRider2018.1【发布时间】:2018-06-0714:10:17【问题描述】:我在Windows10下安装JetBrainsRider2018.1时经常遇到行尾问题。在我编辑现有LF文件后,IDE会... 查看详情

JetBrains Rider - 如何从断点中排除某种类型的异常

】JetBrainsRider-如何从断点中排除某种类型的异常【英文标题】:JetBrainsRider-Howtoexcludeacertaintypeofexceptionfrombreakpoints【发布时间】:2018-03-2103:27:38【问题描述】:我是JetBrainsRider的新手,发现它非常适合C#开发。就在我们的解决方案... 查看详情

如何在 Jetbrains Rider 中开发 GUI 设计器,例如在 Visual Studio 中用于 WinForms、WPF 等? [复制]

】如何在JetbrainsRider中开发GUI设计器,例如在VisualStudio中用于WinForms、WPF等?[复制]【英文标题】:howtodevelopaGUIdesignerinJetbrainsRiderlikeinVisualStudioforWinForms,WPFetc?[duplicate]【发布时间】:2018-08-0914:58:08【问题描述】:是否可以在Jetbrain... 查看详情

如何在 Mac 上使用 JetBrains Rider 开发和调试在 Docker 中运行的 .NET Core 应用程序

】如何在Mac上使用JetBrainsRider开发和调试在Docker中运行的.NETCore应用程序【英文标题】:Howtodevelopanddebug.NETCoreapplicationrunningintoDockerusingJetBrainsRideronMac【发布时间】:2017-08-3100:56:58【问题描述】:我已经开始使用.NETCore1.1和JetBrainsR... 查看详情

如何在 Jetbrains Rider 中为 ASP.NET CORE 2 设置 XUnit 测试?

】如何在JetbrainsRider中为ASP.NETCORE2设置XUnit测试?【英文标题】:HowtosetupXUnittestinginJetbrainsRiderforASP.NETCORE2?【发布时间】:2019-03-1015:27:18【问题描述】:我在使用XUnit在Rider中进行测试时遇到问题。基本上,我有两个项目的解决方... 查看详情

Jetbrains Rider:在调试器调用堆栈中显示“外部代码”

】JetbrainsRider:在调试器调用堆栈中显示“外部代码”【英文标题】:JetbrainsRider:Show"externalcode"indebuggercallstack【发布时间】:2020-11-1612:59:29【问题描述】:在Rider中,当在断点处暂停时,有没有办法在调试器堆栈帧中实际... 查看详情

如何在 JetBrains Rider 中允许不安全的代码?

】如何在JetBrainsRider中允许不安全的代码?【英文标题】:HowtoallowunsafecodeinJetBrainsRider?【发布时间】:2020-11-0817:21:56【问题描述】:我想在JetBrainsRider2020.2.4forlinux中允许不安全代码。我查看了thisquestion,但说明似乎不适用于此版... 查看详情

如何在 Rider 中触发文件更改的设计时构建?

】如何在Rider中触发文件更改的设计时构建?【英文标题】:Howtotriggeradesign-timebuildonfilechangeinRider?【发布时间】:2019-02-1810:31:56【问题描述】:我创建了一个NuGetpackage,它在设计和构建时从DSL文件生成C#代码。它在VisualStudio中运... 查看详情

JetBrains Rider 移除高亮显示

】JetBrainsRider移除高亮显示【英文标题】:JetBrainsRiderremovehighlight【发布时间】:2021-08-2016:14:55【问题描述】:安装了全新版本的Rider。出于某种原因,Rider会突出显示方法(c#)中的所有代码-无论我选择什么主题。我试过重置默认... 查看详情

在 JetBrains Rider 中更改 exe 的应用程序图标

】在JetBrainsRider中更改exe的应用程序图标【英文标题】:ChangeappiconofexeinJetBrainsRider【发布时间】:2018-08-0114:24:51【问题描述】:我在IDE和网上搜索了但没有找到任何东西,所以我问:在JetBrainsRider中,有什么办法可以改变当前项... 查看详情

在 JetBrains Rider 中调试从 docker compose 运行的 .Net Core 3 应用程序

】在JetBrainsRider中调试从dockercompose运行的.NetCore3应用程序【英文标题】:Debuginga.NetCore3apprunfromdockercomposeinJetBrainsRider【发布时间】:2019-12-3010:41:55【问题描述】:我正在尝试运行从docker-compose本地构建的多容器服务。如果我从dock... 查看详情

.NetCore 项目加载在 Windows 上的 JetBrains Rider 中失败

】.NetCore项目加载在Windows上的JetBrainsRider中失败【英文标题】:.NetCoreprojectloadingfailedinJetBrainsRideronwindows【发布时间】:2017-03-2714:05:19【问题描述】:我已经安装了最新版本的JetBrainsRider1EAP并使用VS2015创建的project.json打开.NetCore项... 查看详情