FrameWork基础案例解析(三)

文章目录

          • 单独编译Framework
          • 快速烧录Framework
          • 加入一行日志
          • 单独编译Service
          • 单独编译 framework-res
          • 单独编译 app WallpaperPicker

单独编译Framework

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

解决编译framework 1kb的问题
https://www.twblogs.net/a/5eb1defb86ec4d105966697d/?lang=zh-cn
WITH_DEXPREOPT修改成false,如下两个文件其中的一个修改即可
FrameWork基础案例解析(三)_第1张图片
FrameWork基础案例解析(三)_第2张图片

编译Framework
make framework -j12

编译完成
FrameWork基础案例解析(三)_第3张图片
编译前
在这里插入图片描述
编译后
FrameWork基础案例解析(三)_第4张图片

快速烧录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

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

加入一行日志

FrameWork基础案例解析(三)_第5张图片
FrameWork基础案例解析(三)_第6张图片

单独编译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

如下我们打印日志看到调用了ActivityManagerService的startActivity
FrameWork基础案例解析(三)_第7张图片

FrameWork基础案例解析(三)_第8张图片

单独编译 framework-res

注意:一定要有修改 不然不会生成新的文件,如下改动后大小无变化,但是保存后会触发编译
make framework-res -j12
编译前
FrameWork基础案例解析(三)_第9张图片
编译后
FrameWork基础案例解析(三)_第10张图片

adb push out/target/product/angler/system/framework/framework-res.apk /system/framework
adb shell am restart
单独编译 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

打印出默认壁纸的路径
/data/user/0/com.android.wallpaperpicker/files/26_default_thumb2.jpg
在这里插入图片描述
这个图片从哪里来?
FrameWork基础案例解析(三)_第11张图片

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;
    }

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

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

你可能感兴趣的:(Android,FrameWork,篇,Framework)