How do I resolve error "Package com.companyname.uarttest requires unavailable shared library com.google.android.things"?

Viewed 139

I am working on a Xamarin.Android project that needs UART support. For test purposes, I created a new Xamarin.Forms project, targeting only Android. I added nuget package Xamarin.Android.Things to the android project.

I updated AndroidManifest.xml to add permissions and specify requiring com.google.android.things. Here is my manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.uarttest">
    <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="28" />
    <application android:label="UARTTest.Android">
      <uses-library
           android:name="com.google.android.things"
           android:required="true"/>      
    </application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO" />
</manifest>

In MainActivity.cs, I updated it to retrieve UartDeviceList. Here is the code:

using System;
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Things.Pio;

namespace UARTTest.Droid
{
    [Activity(Label = "UARTTest", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            var peripheralManager = PeripheralManager.Instance;
            var list = peripheralManager.UartDeviceList;
            LoadApplication(new App());
        }
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}

The .NET Standard project has no changes from the generated code. At this point, I am just looking to retrieve the list of UART devices as a proof of concept, but when I run I get an error:

ADB0010:  Deployment failed
Mono.AndroidTools.InstallFailedException: Failure [INSTALL_FAILED_MISSING_SHARED_LIBRARY: Package couldn't be installed in /data/app/com.companyname.uarttest-fBCeYpKDcxYmwYuDq8PjFA==: Package com.companyname.uarttest requires unavailable shared library com.google.android.things; failing!]
at Mono.AndroidTools.Internal.AdbOutputParsing.CheckInstallSuccess(String output, String packageName) in E:\A\_work\548\s\External\androidtools\Mono.AndroidTools\Internal\AdbOutputParsing.cs:line 341
at Mono.AndroidTools.AndroidDevice.<>c__DisplayClass95_0.<InstallPackage>b__0(Task`1 t) in E:\A\_work\548\s\External\androidtools\Mono.AndroidTools\AndroidDevice.cs:line 753
   at System.Threading.Tasks.ContinuationTaskFromResultTask`1.InnerInvoke()

I gather I need to install an SDK from Google to resolve this. From Visual Studio 2019, what do I need to do to install the correct SDK to resolve this issue and how do I do that?

0 Answers
Related