我如何从Android设备上获取apk文件?或者如何将apk文件从设备传输到系统?
我有一个应用程序(这里),除了其他功能,允许共享APK文件.
为了做到这一点,它通过访问packageInfo.applicationInfo.sourceDir(这里是 docs链接)的路径到达文件,并且只是共享文件(在需要时使用ContentProvider,就像我在这里使用的那样).
这在大多数情况下都可以正常工作,尤其是从Play商店或独立的APK文件安装APK文件时,但是当我使用Android-Studio本身安装应用程序时,我在此路径上看到多个APK文件,而且没有一个是有效的,可以安装和运行没有任何问题.
这是从"Alerter"github repo中试用样本后该文件夹内容的屏幕截图 :
我不确定这个问题何时开始,但至少在我的Nexus 5x和Android 7.1.2上确实发生过.也许甚至以前.
这似乎只是因为在IDE上启用了即时运行这一事实,因此它可以帮助更新应用程序,而无需一起重新构建它:
禁用它后,我可以看到有一个APK,就像过去一样:
您可以在正确的APK和分割的APK之间看到文件大小的差异.
此外,似乎有一个API来获取所有分裂的APK的路径:
什么应该是最简单的方式来共享一个被分成多个的APK?
真的需要以某种方式合并它们吗?
根据文档似乎有可能:
零或更多拆分APK的完整路径,当与sourceDir中定义的基本APK结合使用时,形成一个完整的应用程序.
但是这样做的正确方法是什么,并且有一种快速有效的方法吗?也许没有真正创建文件?
是否有一个API可以从所有拆分的APK中获得合并的APK?或者也许这样的APK已经存在于其他路径中,并且不需要合并?
编辑:刚刚注意到,我尝试过的所有第三方应用程序都应该共享已安装的应用程序的APK,在这种情况下无法执行此操作.
没有root用户,我知道可以使用Intent安装一个普通的APK(此处)。
给定root,我知道可以使用this安装它。
这将像正常安装过程一样将应用程序安装为用户应用程序。
还有一种方法来安装拆分式APK应用程序(在此处),尽管由于某种原因我没有成功使用它。
我想知道如何将应用程序转换和/或安装为系统安装的应用程序,然后再转换为用户应用程序。
这包括尚未安装的应用程序和已经安装的应用程序的APK文件。
我发现了一些很旧的方式将现有的应用程序(或安装一个新的)到系统的应用程序(在这里,例如或这里),称(简称),我应该只是移动APK文件转换成/system/app/路径。
事实是,这可能在过去有效,但现在却没有。我认为这是因为现在的应用程序/system/app/以不同的方式存在:每个应用程序都有一个文件夹,其中包含一些文件。
至于转换回用户应用程序,我找不到它。将拆分的APK应用程序安装到系统应用程序并将其转换回用户应用程序也是如此。
实际上,我记得Play商店中有一些应用程序(例如这一类),可以将其他应用程序很好地转换为系统应用程序(使用root)-现在无法执行任何操作。
将应用安装/转换为系统应用的方法何时生效?为什么它不再起作用了?
在旧版和新版Android上,将应用程序安装/转换为系统应用程序,然后再转换回用户应用程序应怎么做?
分离式应用程序(例如:AirBnb应用程序)或至少已安装的应用程序是否可能具有相同的作用?
有时,当您备份某个应用程序的某些APK文件时,您会注意到它们由多个APK文件组成,这意味着拆分的APK文件(又称为应用程序捆绑包)。
我想知道,当有人向用户发送APK文件时,它的确是独立文件还是拆分APK文件的一部分。原因是不同的过程,甚至是这样的警告,因为拆分的APK文件并不是真的要像正常文件一样安装。
给定PackageManager类(在此处),我找不到getPackageArchiveInfo获取此类信息的方法。
有splitNames和splitRevisionCodes,但都为空。
给定一个APK文件,是否可以检查它是否属于多个拆分APK文件的一部分?
编辑:因此,由于这里,我已经找到了如何对拆分的APK文件(“ base.APK”)的主要APK进行操作:
val packageInfo = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_META_DATA)
val isSplit = packageInfo.applicationInfo.metaData.getBoolean("com.android.vending.splits.required", false)
Run Code Online (Sandbox Code Playgroud)
但是,至于其余的拆分apk文件,getPackageArchiveInfo在其上使用将仅返回null。我找不到如何解析它们的清单以找到“ split”属性。
所以我的问题是:
给定其余的拆分APK文件,我如何解析它们以检查它们是否确实是属于base.APK文件的拆分APK文件?