• FrameWork基础案例解析(三)


    单独编译Framework

    https://unbroken.blog.csdn.net/article/details/127581409

    make framework -j12

    heap不足

    export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8g"
     
    两种方式任选其一都可以,然后执行jack重启命令:
     
    out/host/linux-x86/bin/jack-admin kill-server
    out/host/linux-x86/bin/jack-admin start-server
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解决编译framework 1kb的问题
    https://www.twblogs.net/a/5eb1defb86ec4d105966697d/?lang=zh-cn
    WITH_DEXPREOPT修改成false,如下两个文件其中的一个修改即可
    在这里插入图片描述
    在这里插入图片描述

    编译Framework
    make framework -j12

    编译完成
    在这里插入图片描述
    编译前
    在这里插入图片描述
    编译后
    在这里插入图片描述

    快速烧录Framework
    adb root
    adb remount
    adb shell rm -rf /system/framework/arm
    adb shell rm -rf /system/framework/arm64
    adb push out/target/product/angler/system/framework/framework.jar /system/framework
    adb shell am restart
    
    Or
    
    # adb shell start //启动framework
    # adb shell stop //停止framework
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    adb remount 出现 adb disable-verity
    dm_verity is enabled on the system partition. Use "adb disable-verity" to disable verity. If you do not, remount may succeed, however, you will still not be able to write to these volumes. remount succeeded

    解决
    adb disable-verity
    adb root

    加入一行日志

    在这里插入图片描述
    在这里插入图片描述

    单独编译Service
    mmm -j12 framework/base/services
    or
    make services -j12
    or 
    mm -j12
    
    adb push  out/target/product/angler/system/framework/services.jar  /system/framework/
    adb shell am restart
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如下我们打印日志看到调用了ActivityManagerService的startActivity
    在这里插入图片描述

    在这里插入图片描述

    单独编译 framework-res

    注意:一定要有修改 不然不会生成新的文件,如下改动后大小无变化,但是保存后会触发编译
    make framework-res -j12
    编译前
    在这里插入图片描述
    编译后
    在这里插入图片描述

    adb push out/target/product/angler/system/framework/framework-res.apk /system/framework
    adb shell am restart
    
    • 1
    • 2
    单独编译 app WallpaperPicker

    https://www.jianshu.com/p/d758646cac80

    cd packages/apps/WallpaperPicker/
    mm WITH_DEXPREOPT=false #打包出apk
    adb shell rm system/app/WallpaperPicker/WallpaperPicker.apk
    adb shell rm -r system/app/WallpaperPicker/oat/arm64
    adb push out/target/product/angler/system/app/WallpaperPicker/WallpaperPicker.apk system/app/WallpaperPicker
    adb shell am restart
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    打印出默认壁纸的路径
    /data/user/0/com.android.wallpaperpicker/files/26_default_thumb2.jpg
    在这里插入图片描述
    这个图片从哪里来?
    在这里插入图片描述

    packages/apps/WallpaperPicker/src/com/android/wallpaperpicker/tileinfo/DefaultWallpaperInfo.java

    private static ResourceWallpaperInfo getPreKKDefaultWallpaperInfo(Context context) {
            Resources sysRes = Resources.getSystem();
            Resources res = context.getResources();
    
            int resId = sysRes.getIdentifier("default_wallpaper", "drawable", "android");
    
            File defaultThumbFile = getDefaultThumbFile(context);
            Bitmap thumb = null;
            boolean defaultWallpaperExists = false;
            if (defaultThumbFile.exists()) {
                thumb = BitmapFactory.decodeFile(defaultThumbFile.getAbsolutePath());
                defaultWallpaperExists = true;
            } else {
                InputStreamProvider streamProvider = InputStreamProvider.fromResource(res, resId);
                thumb = createThumbnail(
                        streamProvider, context, streamProvider.getRotationFromExif(context), false);
                if (thumb != null) {
                    defaultWallpaperExists = saveDefaultWallpaperThumb(context, thumb);
                }
            }
            if (defaultWallpaperExists) {
                return new ResourceWallpaperInfo(sysRes, resId, new BitmapDrawable(res, thumb));
            }
            return null;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    Resources.getSystem() 可以在任何地方进行使用,但是有一个局限,只能获取系统本身的资源。
    系统资源存放地址可在 platforms/android-xx/data/res/ 目录下查看

  • 相关阅读:
    [尚硅谷React笔记]——第1章 React简介
    递归应用判断是否循环引用
    【云原生】灰度发布、蓝绿发布、滚动发布、灰度发布解释
    每日五道java面试题之springMVC篇(三)
    uniapp下载附件保存到手机(文件、图片)ios兼容
    New:WebKitX ActiveX :::Crack
    [附源码]java毕业设计流浪动物救助系统
    Redis高级及实战
    2023年【烟花爆竹经营单位主要负责人】考试及烟花爆竹经营单位主要负责人新版试题
    离线数仓同步数据2
  • 原文地址:https://blog.csdn.net/qq_20330595/article/details/134500687