码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • FrameWork基础案例解析(三)


    文章目录

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

    单独编译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/ 目录下查看

  • 相关阅读:
    【Vue】fabricjs 实现局部截图及el-image-viewer大图预览
    程序员的成长之路——道和术的思考
    序列化协议:Protobuf入门
    PySimpleGUI:使用 Python 轻松制作一个图形界面(GUI)
    小艺的英文名编程求助(帮忙检查)
    【kafka】JDBC source&sink connect实现数据从Oracle实时同步插入更新到PostgreSQL(PG)...
    【ASM】字节码操作 转换已有的类 ClassReader 介绍
    Python:魔术方法(__getitem__、__len__等包含双下划线构成的方法)的简介、使用案例之详细攻略
    手写promis(2)-- 链式编程篇
    【Mongoose笔记】入门使用
  • 原文地址:https://blog.csdn.net/qq_20330595/article/details/134500687
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号