【问题标题】:How to get packagename of aar file?如何获取 aar 文件的包名?
【发布时间】:2019-05-28 09:12:52
【问题描述】:

我正在创建一个 aar 库,我需要获得 aar packagename 以获取 aar 文件的标志。

我正在尝试下面的代码,但 getPackageName() 方法没有返回 aar packagename

Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs){
    Log.i("MyApp", "Signature hashcode : " + sig.hashCode());
}

【问题讨论】:

  • 如果您自己创建了aar 库,那么您应该已经知道包名称。请解释为什么需要以编程方式阅读它?
  • @sourav.bh 获取 aar 的迹象
  • 嗨@Milad 我能够通过使用BuildConfig.LIBRARY_PACKAGE_NAME 获得AAR 的包名称,但getPackageInfo() 会引发NameNotFoundException。我正在尝试做同样的事情,即在运行时验证我的 AAR 的签名。你能找到解决方案吗?如果你这样做了,请分享。

标签: android android-library aar package-name


【解决方案1】:

仅在编译期间读取 AAR 库。当您构建使用该库的应用程序时,AAR 被“包含”并与应用程序代码合并,因此运行时中的 PackageName 是应用程序之一,而不是您的库之一。登录 AAR 文件用于让开发人员确定该文件的来源,仅此而已。在运行时,该签名在构建过程后丢失。

【讨论】:

  • 这仅适用于context.getPackageName(),不适用于class.getPackage().getName()
【解决方案2】:

您可以通过访问 .aar 库中的类来简单地获取包名称。假设你在库中有一个名为Sample.java的类,那么你可以这样获取包名:

String packageName = Sample.class.getPackage().getName();

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 2017-09-07
    • 2014-05-16
    • 1970-01-01
    • 2013-01-31
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多