在 Android 中获取拆分 APK 信息
Posted
技术标签:
【中文标题】在 Android 中获取拆分 APK 信息【英文标题】:Get Split APK Info in Android 【发布时间】:2021-11-03 05:23:52 【问题描述】:我有一个 3p 应用商店应用,它可以安装其他应用。在我的应用中,支持安装单个 APK 和拆分 APK。
对于具有拆分 APK 的应用,在安装期间,我只安装所需的 APK,就像设备上仅安装所选语言的 APK。
现在,当设备语言发生变化时,我想为我的应用安装的所有应用安装新的语言 APK。在触发安装之前,我需要先检查该语言的 APK 是否已经安装,或者针对特定包名称安装了哪些所有 APK。
在 android 中,如果安装了某些语言 APK 或有关所有已安装 APK 的信息,我没有找到任何 API 可以提供给我。有什么方法可以获取这些信息?
Edit-1:我无法使用 Play 核心库。我正在寻找一种使用 Android 类的方法。
【问题讨论】:
请明确说明,如果安装了应用程序,您是否想获取拆分信息,或者您想从尚未安装的 xapk、apks 等拆分文件中获取信息?请让我知道,以便我可以为您添加答案。我有两种方法。谢谢... 【参考方案1】:这是不可能的。 使用您已安装的应用程序的包名称,您可以从 PackageInfo.#applicationInfo 获取所有拆分的 APK,但不提供任何额外信息。
Playcore 有一些类,例如 SplitInstallManager,它具有 getInstalledModules、getInstalledLanguages 等方法,可用于获取已安装的 APK,但不确定您是否也可以获取有关其他应用的信息。
【讨论】:
【参考方案2】:代码:
public static boolean isConfigInstalled(PackageManager pm, String pkg, String conf) throws PackageManager.NameNotFoundException
// get application info for installed app
ApplicationInfo ai=pm.getApplicationInfo(pkg, 0);
// get installed split's Names
String[] sn=ai.splitNames;
// check whether if it's really split or not
if (sn != null && sn.length > 0)
// search installed splits
for(String n:sn)
// check whether is the one required
if(n.equals("config." + conf))
// yes, it's installed!
return true;
// couldn't find!
return false;
使用方法:
只需传递您通过context.getPackageManager() 获得的包管理器以及应用的包名 和语言代码
示例:
PackageManager pm=getPackageManager();
String pkg="com.snapchat.android";
String languageCode="ur";
if(isConfigInstalled(pm, pkg, languageCode))
System.out.println("Snapchat has Urdu Installed!");
else
System.out.println("Snapchat doesn't has Urdu Installed!");
输出:
Snapchat has Urdu Installed!
【讨论】:
以上是关于在 Android 中获取拆分 APK 信息的主要内容,如果未能解决你的问题,请参考以下文章
Android apk签名详解——AS签名获取签名信息系统签名命令行签名
android怎么获取刚刚下载安装的APK的APP名字和图片
我的Android进阶之旅解决安装apk时出现错误:INSTALL_FAILED_CONFLICTING_PROVIDER : Package couldn‘t be installed in(代码片