如何从共享库中获取版本信息到Android清单?

我们有一个共享库,其中包含版本信息,并且被Visual Studio解决方案中的所有项目引用。

大多数情况下,我们可以引用每个项目的版本字符串,并且dll会相应地反映信息。

我的问题在于,我们的Android应用程序(基于xamarin)。 它有一个包含versionName和versionCode的清单文件。

我们如何在我们的共享项目中读取我们的Android清单文件中的值?


我的理解是,这是不可能的。 因为

清单文件向Android系统提供有关您的应用程序的重要信息,这是系统在运行任何应用程序代码之前必须具备的信息。

来自Google的文档

所以这是在App构建之前需要的文件。

共享项目中的C#代码(SAP / PCL)只有在编译成功后才可以使用。 因此,从逻辑上在Android Manifest文件中逻辑设置版本代码和版本名称是不可能的。

另一种标准方法是从Android中的字符串资源(XML)文件中设置它。 您可能需要将Shared Project中的值复制并粘贴到strings.xml文件,然后将其转换为清单文件,例如

@string/versionCode

注意:我对xamarin一无所知。

在java中,您可以像这样从清单中获取versioninfo

public static String getAppVersionName(final Context context) {
    try {

        final String versionName = context.getPackageManager()
                .getPackageInfo(context.getPackageName(), 0).versionName;
        return versionName;
    } catch (final NameNotFoundException e) {
    }
    return null;
}

我假设xamarin有一些机制来调用PackageManager来获取Packageinfo


你可以通过使用依赖服务来做到这一点。 这里有一篇很棒的文章:https://developer.xamarin.com/guides/xamarin-forms/dependency-service/

这个想法是你的Dependency Service会将Android的特定信息公开给共享代码库。

例如,你可能在你的公共代码中有一个接口,例如:

public interface IPlatformVersionInfo
{
    string GetOSVersion (); 
}

现在,在您的Android库中,您可以实现它:

public class PlatformVersionInfo : IPlatformVersionInfo
{
    public string GetOSVersion () {
        return Android.OS.Build.VERSION.SdkInt.ToString ();
    }
}

最后,在你的通用代码中,你将使用你选择的依赖服务来调用它的一个实例:

var osVersion = DependencyService.Get<IPlatformVersionInfo>().GetOSVersion ();

当然这是一些伪代码,取决于你选择代码的依赖性服务可能看起来有点不同。

链接地址: http://www.djcxy.com/p/90747.html

上一篇: How to get version info from a shared library into the Android manifest?

下一篇: How to set different label for launcher rather than activity title?