android - 读取 list 文件 : list <uses-library>

标签 android android-manifest

我正在开发一个图书馆,假设这个图书馆依赖于谷歌地图。

当有人在 Android 应用程序中使用它时,我想确保在他的 list 中,他在应用程序标签中声明了以下标签:

<uses-library android:name="com.google.android.maps" android:required="true" />

我正在寻找一种读取 list 的方法,以便我可以显示一个 Toast 或一个日志,上面写着“嘿,伙计,你忘记在你的 list 中包含“uses-library”!请更正,或者不要问我问题,我不会支持你的”(基本上)

到目前为止,我找到了阅读一堆内容(权限等)的方法,但没有关于 uses-library 标签的内容。

(这是一个例子,我实际上并没有使用 maps v1)

最佳答案

我正在编写一个仪器测试,我想检查某个特定的库是否不再被使用。只是巧合,它是“com.google.android.maps”。

Google 的官方文件说明

To check for a library, you can use reflection to determine if a particular class is available.

但是还有另一种方式来读取“uses-library”。必须考虑以下因素:

  • 标志 PackageManager.GET_SHARED_LIBRARY_FILES 必须用于获取共享库信息
  • 返回的列表包含链接库的完整路径,其文件名与语句中请求的库相同

以下代码适合我:

@SmallTest
@Test
public void testUsesNoV1MapLibrary() {
    packageInfo = context.getPackageManager().getPackageInfo(
        PackageManager.GET_SHARED_LIBRARY_FILES
    ); 

    final ApplicationInfo applicationInfo = packageInfo.applicationInfo;
    String[] sharedLibraries = applicationInfo.sharedLibraryFiles;

    if (sharedLibraries != null) {
        for (String libraryPath : sharedLibraries) {
            assertThat("no com.google.android.maps.jar in use", libraryPath.contains("com.google.android.maps"), is(false));
        }            
    }
}

关于android - 读取 list 文件 : list <uses-library>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24084567/

相关文章:

Android 自动启动应用程序

android - getCurrentUser.put() 不更新解析用户对象

android - 我可以从我的 Cordova config.xml 控制 AndroidManifest.xml 文件的 <supports-screen> 设置吗?

android - fragment 和 Intent 过滤器

android - Jetpack 撰写 : how to reset LazyListState?

java - 接受 URL 作为参数并返回 Java 中的 ImageView

java - 为什么 HttpURLConnection 在 android 上失败但在 java Eclipse 上成功?

android - 在 Android 上重构动态功能模块时构建失败并显示 'task :features:catalog:createDebugCompatibleScreenManifests FAILED'

android - Activity 结束后通知消失

java - Android - style.xml 不起作用