本文主要是介绍PackageManager(PackageInfo),加载assets下APK文件 及快速加载插件APK里面的资源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-- PackageManager.getPackageArchiveInfo,PackageInfo
//得到PackageInfo对象,其中包含了该apk包含的activity和service
public static PackageInfo getPackageInfo(Context context, String apkFilepath) {
PackageManager pm = context.getPackageManager();
PackageInfo pkgInfo = null;
try {
pkgInfo = pm.getPackageArchiveInfo(apkFilepath, PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES);
} catch (Exception e) {
// should be something wrong with parse
e.printStackTrace();
}
return pkgInfo;
}
-- Android 获取指定apk的信息,比如应用名称、版本等信息
String filePath = "/sdcard/feijiedemo.apk";
PackageManager packageManager = getPackageManager();
PackageInfo packageInfo = packageManager.getPackageArchiveInfo(filePath, PackageManager.GET_ACTIVITIES);
Log.d("name", packageInfo.packageName);
//Log.d("uid", packageInfo.sharedUserId);
Log.d("vname", packageInfo.versionName);
Log.d("code", packageInfo.versionCode+"");
-- assets下的文件,安装assets下的APK文件
Android 系统为每个新设计的程序提供了/assets目录,这个目录保存的文件可以打包在程序里。/res 和/assets的不同点是,android不为/assets下的文件生成ID。如果使用/assets下的文件,需要指定文件的路径和文件名(是全名)。
assets下APK文件问题:assets目录下的文件只能得到输入输出流,所以是不是可以把它再输出到一个新的文件里,然后调用Android程序进行安装?
Android安装assets下的APK文件- http://blog.sina.com.cn/s/blog_628cc2b70101dwk6.html
Android安装assets下的APK文件:
(1)先把assets中的APK文件copy到内置SD卡中,比如/mnt/sdcard
(2)然后通过mContext.startActivity(intent);启动一个APK
(3)这个APK的启动是带提示框的,不能被静默安装
-- 动态加载技术?
动态加载技术就是使用类加载器加载相应的apk、dex、jar(必须含有dex文件),再通过反射获得该apk、dex、jar内部的资源(class、图片、color等等)进而供宿主app使用。
- 动态加载apk有两种方式:
一种是将资源主题包的apk安装到手机上再读取apk内的资源,这种方式的原理是将宿主app和插件app设置相同的sharedUserId,这样两个app将会在同一个进程中运行,并可以相互访问内部资源了。新建工程Skin-Plugin,将要更换的图片或者xml文件放在对应的drawable文件夹内,在AndroidManifest.xml中增加shareUserId,然后打包成apk文件。如果是不需要安装apk的,就不用设置shareUserId了。
一种是不用安装资源apk的方式。其原理是通过DexClassLoader类加载器去加载指定路径下的apk、dex或者jar文件,反射出R类中相应的内部类然后根据资源名来获取我们需要的资源id,然后根据资源id得到对应的图片或者xml文件。
android 插件化动态加载apk包(插件apk不需要安装)- https://blog.csdn.net/u012898654/article/details/80341403
-- 加载插件APK里面的资源
Android如何加载插件APK里面的资源- https://blog.csdn.net/liangdong520/article/details/76149148
Android如何加载插件APK里面的资源 ??
如果想要做到插件化,需要了解Android资源文件的打包过程,这样可以为每一个插件进行编号,然后按照规则生成R文件。动态加载插件apk中的资源- https://www.jianshu.com/p/c2532d69a08a
这篇关于PackageManager(PackageInfo),加载assets下APK文件 及快速加载插件APK里面的资源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!