Android 8.0 开发摘要 - litonghui/TechBlog GitHub Wiki

Android 8.0 发布有一段时间了,从官方定义的 Android O 新特性概括两点为 Fluid Experience (流畅性) 和 Vitals (核心功能),对于它新特性不做过多解释,作为开发同学,我们往往关注是新系统又有什么限制?基于安全上的新方法?哪些方法被抛弃?

一,getPackageSizeInfo 方法废弃

在PackageManager 中 提供了一个获取安装包资源的方法,通过包名获取应用程序的缓存,应用程序大小,数据大小,一般清理软件都会用到这个方法扫描安装应用缓存信息,通过反射实现的。
 /*Retrieve the size information for a package.*/
 public void getPackageSizeInfo(String packageName) {}

 public void getpkginfo(String pkg, IPackageStatsObserver.Stub observer) {
        PackageManager pm = getPackageManager();  
        try {  
            //通过反射机制获得该隐藏函数  
            Method getPackageSizeInfo = pm.getClass().getDeclaredMethod("getPackageSizeInfo", String.class,IPackageStatsObserver.class);  
            //回调PkgSizeObserver类的函数,实现 IPackageStatsObserver observer   
            getPackageSizeInfo.invoke(pm, pkgName,new PkgSizeObserver());  
        }   
        catch(Exception ex){  
        }
     }
遗憾的是在Android 8.0 以上,getPackageSizeInfo 被 getPackageSizeInfoAsUser 替换,以前的逻辑需要通过版本适配去修复,否则会直接进入 catch .最近在做适配的时候发现这个问题,项目通过版本适配做了处理,刚好也有相关文章介绍,摘要一下。Android-O-版本安装包大小获取失败问题分析及解决