0

How can I use cake ADB in the right way?

My laptop -> Mackbook M1

#addin "nuget:?package=Cake.Xamarin&version=3.0.2"
#addin "nuget:?package=Cake.Android.Adb&version=3.2.0"
#addin "nuget:?package=Cake.Android.SdkManager&version=3.0.2"

const string NEXUS_GO_ANDROID = "/Users/***/***.Android.csproj";


Task("Test")
  .Does(() => 
  {
      FilePath androidApk = BuildAndroidApk(projectFile: NEXUS_GO_ANDROID, sign: true, configuration: "Debug", configurator: null);
      //FilePath androidApk = BuildAndroidApk(projectFile: NEXUS_GO_ANDROID, sign: false, configuration: "Debug", configurator: null);
      Console.WriteLine($"!!! android APK {androidApk}");
      //AdbUninstall("uk.co.pallex.nexusgo");
      AdbInstall(apkFile: androidApk);
  });
 
RunTarget("Test");

>dotnet cake

...
Time Elapsed 00:00:06.48
!!! android APK /Users/***/***.Android/bin/Debug/***-Signed.apk
An error occurred when executing task 'Test'.
Error: One or more errors occurred. (Object reference not set to an instance of an object.)
        Object reference not set to an instance of an object.

My goal is to build once and run apk in two enumerators(where one is LTR and second is RTL). But now I can't run even on one of them.

How can I fix that? Update to another version? Set some global properties?

Update

for get more information we need run dotnet cake --verbosity=diagnostic

Could not resolve path for tool "adb" using these directories: /usr/local/bin,/usr/bin,/bin,/usr/sbin,/sbin,/usr/local/share/dotnet,~/.dotnet/tools,/Library/Apple/usr/bin,/Library/Frameworks/Mono.framework/Versions/Current/Commands,/opt/homebrew/bin,/opt/homebrew/sbin
Could not resolve path for tool "adb.exe" using these directories: /usr/local/bin,/usr/bin,/bin,/usr/sbin,/sbin,/usr/local/share/dotnet,~/.dotnet/tools,/Library/Apple/usr/bin,/Library/Frameworks/Mono.framework/Versions/Current/Commands,/opt/homebrew/bin,/opt/homebrew/sbin
An error occurred when executing task 'Test'.
Error: System.AggregateException: One or more errors occurred. (Object reference not set to an instance of an object.)
 ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at Cake.AndroidAdb.AdbTool.GetAlternativeToolPaths(AdbToolSettings settings)
   at Cake.Core.Tooling.Tool`1.GetToolPathUsingToolService(TSettings settings) in C:\projects\cake\src\Cake.Core\Tooling\Tool.cs:line 285
   at Cake.Core.Tooling.Tool`1.GetToolPath(TSettings settings) in C:\projects\cake\src\Cake.Core\Tooling\Tool.cs:line 266
   at Cake.Core.Tooling.Tool`1.RunProcess(TSettings settings, ProcessArgumentBuilder arguments, ProcessSettings processSettings) in C:\projects\cake\src\Cake.Core\Tooling\Tool.cs:line 160
   at Cake.Core.Tooling.Tool`1.Run(TSettings settings, ProcessArgumentBuilder arguments, ProcessSettings processSettings, Action`1 postAction) in C:\projects\cake\src\Cake.Core\Tooling\Tool.cs:line 81
   at Cake.Core.Tooling.Tool`1.Run(TSettings settings, ProcessArgumentBuilder arguments) in C:\projects\cake\src\Cake.Core\Tooling\Tool.cs:line 60
   at Cake.AndroidAdb.AdbTool.Uninstall(String packageName, Boolean keepDataAndCacheDirs, AdbToolSettings settings)
   at Cake.AndroidAdb.AdbAliases.AdbUninstall(ICakeContext context, String packageName, Boolean keepDataAndCacheDirs, AdbToolSettings settings)
   at Submission#0.AdbUninstall(String packageName, Boolean keepDataAndCacheDirs, AdbToolSettings settings)
   at Submission#0.<<Initialize>>b__0_4()
   at Cake.Core.CakeTaskBuilderExtensions.<>c__DisplayClass31_0.<Does>b__0(ICakeContext _) in C:\projects\cake\src\Cake.Core\CakeTaskBuilder.Execution.cs:line 26
   at Cake.Core.CakeTaskBuilderExtensions.<>c__DisplayClass34_0.<Does>b__0(ICakeContext context) in C:\projects\cake\src\Cake.Core\CakeTaskBuilder.Execution.cs:line 81
   at Cake.Core.CakeTask.Execute(ICakeContext context) in C:\projects\cake\src\Cake.Core\CakeTask.cs:line 119
   at Cake.Core.DefaultExecutionStrategy.ExecuteAsync(CakeTask task, ICakeContext context) in C:\projects\cake\src\Cake.Core\DefaultExecutionStrategy.cs:line 72
   at Cake.Core.CakeEngine.ExecuteTaskAsync(ICakeContext context, IExecutionStrategy strategy, Stopwatch stopWatch, CakeTask task, CakeReport report) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 278
   at Cake.Core.CakeEngine.ExecuteTaskAsync(ICakeContext context, IExecutionStrategy strategy, Stopwatch stopWatch, CakeTask task, CakeReport report) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 301
   at Cake.Core.CakeEngine.ExecuteTaskAsync(ICakeContext context, IExecutionStrategy strategy, Stopwatch stopWatch, CakeTask task, CakeReport report) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 311
   at Cake.Core.CakeEngine.RunTask(ICakeContext context, IExecutionStrategy strategy, CakeTask task, String target, Stopwatch stopWatch, CakeReport report) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 226
   at Cake.Core.CakeEngine.RunTargetAsync(ICakeContext context, IExecutionStrategy strategy, ExecutionSettings settings) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 189
   at Cake.Cli.BuildScriptHost`1.RunTargetAsync(String target) in C:\projects\cake\src\Cake.Cli\Hosts\BuildScriptHost.cs:line 73
   at Cake.Core.Scripting.ScriptHost.RunTarget(String target) in C:\projects\cake\src\Cake.Core\Scripting\ScriptHost.cs:line 105
   at Submission#0.<<Initialize>>d__0.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Scripting.Script`1.RunSubmissionsAsync(ScriptExecutionState executionState, ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, Func`2 catchExceptionOpt, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at Cake.Infrastructure.Scripting.RoslynScriptSession.Execute(Script script) in C:\projects\cake\src\Cake\Infrastructure\Scripting\RoslynScriptSession.cs:line 90
   at Cake.Core.Scripting.ScriptRunner.Run(IScriptHost host, FilePath scriptPath) in C:\projects\cake\src\Cake.Core\Scripting\ScriptRunner.cs:line 172
   at Cake.Features.Building.BuildFeature.RunCore(IRemainingArguments arguments, BuildFeatureSettings settings) in C:\projects\cake\src\Cake\Features\Building\BuildFeature.cs:line 99
   at Cake.Features.Building.BuildFeature.Run(IRemainingArguments arguments, BuildFeatureSettings settings) in C:\projects\cake\src\Cake\Features\Building\BuildFeature.cs:line 49
   at Cake.Commands.DefaultCommand.Execute(CommandContext context, DefaultCommandSettings settings) in C:\projects\cake\src\Cake\Commands\DefaultCommand.cs:line 73
subKiller
  • 160
  • 3
  • 11
  • 1
    Could you run `dotnet cake --verbosity=diagnostic` that should show a more details of the exception. – Nils Nov 16 '21 at 09:40
  • Thanks you right, with that I can see that it can't find `adb`, going to add it and check how that works with it. – subKiller Nov 16 '21 at 12:06

1 Answers1

1

To identify a problem you need run with diagnostic verbosity: dotnet cake --verbosity=diagnostic(thanks @nils)

To add adb into your $PATH you can follow answers for this question: Not able to access adb in OS X through Terminal, "command not found"

Now after that it runs without any problems:

Time Elapsed 00:00:07.18
!!! android APK /Users/***/bin/Debug/***-Signed.apk
Success
Performing Streamed Install
Success
subKiller
  • 160
  • 3
  • 11
  • 1
    Glad you found it. FWIW: I filed an issue under https://github.com/cake-contrib/Cake.Android.Adb/issues/10 since the error message is totally wrong. – Nils Nov 16 '21 at 12:39