Android Frameworks 开发总结之七

1.修改android 系统/system/下面文件时权限不够问题

下面提到的方式目前在Bobcat的userdebug image上测试可行,还没有在user上测试过.

修改前:

leif@leif:~$ adb root
restarting adbd as root
leif@leif:~$ adb disable-verity
verity is already disabled
using overlayfs
Now reboot your device for settings to take effect

重启机器后:

leif@leif:~$ adb root
restarting adbd as root
leif@leif:~$ adb remount
[libfs_mgr]dt_fstab: Skip disabled entry for partition vendor
[libfs_mgr]dt_fstab: Skip disabled entry for partition vendor
[libfs_mgr]dt_fstab: Skip disabled entry for partition vendor
[libfs_mgr]dt_fstab: Skip disabled entry for partition vendor
[libfs_mgr]dt_fstab: Skip disabled entry for partition vendor
remount succeeded

2.添加公共的系統資源

添加公共的系統資源, 有兩種方法

  • 將需要的資源添加到SDK中進行使用 比如添加資源到SDK中的Settings和BatteryManager中。添加資源後在開始編譯前, 需要將此資源聲明為@hide或執行make update-api操作, Android 10以後須執行make api-stubs-docs-update-current-api

  • 將需要添加的資源作為私有的標識來使用, 添加資源後,需要在frameworks/base/core/res/res/symbols.xml中聲明此資源, 然後在java代碼中使用com.android.internal.R.來使用


3.查找某一個控件的ID

有的時候我們在debug某一個bug的時候需要查找其中的一个控件的ID,这个时候我们可以使用SDK中提供的tool进行查找,运行SDK/tools/monitor 脚本,在打开的Android Device Monitor中选中左上角的设备,再点击Dump View Hierarchy for UI Automator , 在中间出现的Device UI中用鼠標点击需要查找的控件的区域,在右侧会把当前点击区域的所有控件都列出来。

4.關於Snapdragon camera中的一些問題修改

4.1 菜單提示位置不正確
    XXX機器由橫屏轉爲豎屏後,snapdragon camera的filters 和 scene mode提示位置不正確。修改位置:packages/apps/SnapdragonCamera/src/com/android/camera/ui/MenuHelp.java 
    在setLocation中修改方向值

 private void setLocation(int w, int h) {int rotation = getUnifiedRotation();toIndex(mHelp0_0, w, h, rotation, 1, 3, HELP_0_0_INDEX);toIndex(mHelp1_0, w, h, rotation, 2, 2, HELP_1_0_INDEX);if(TsMakeupManager.HAS_TS_MAKEUP)toIndex(mHelp3_0, w, h, rotation, 3, 1, HELP_3_0_INDEX);if (!forCamera2) {toIndex(mHelp4_6, w, h, rotation, 3, 4, HELP_4_6_INDEX);} else {mHelp4_6.setVisibility(View.GONE);}toIndex(mOk2_4, w, h, rotation, 1, 5, OK_2_4_INDEX);fillArrows(w, h, rotation);}

修改方向後如果發現箭頭的弧度有問題,可以在fillArrows中修改

private void fillArrows(int w, int h, int rotation) {View v1 = new View(mContext);View v2 = new View(mContext);View v3 = new View(mContext);{toIndex(v1, w, h, rotation, 1, 3, -1);toIndex(v2, w, h, rotation, 0, 1, -1);toIndex(v3, w, h, rotation, 0, 0, -1);float[] x = {v1.getX()-POINT_MARGIN, v2.getX(), v3.getX()};float[] y = {v1.getY()-POINT_MARGIN, v2.getY(), v3.getY()};mArrows.addPath(x, y);}{toIndex(v1, w, h, rotation, 2, 2, -1);toIndex(v2, w, h, rotation, 1, 1, -1);toIndex(v3, w, h, rotation, 1, 0, -1);float[] x = {v1.getX()-POINT_MARGIN, v2.getX(), v3.getX()};float[] y = {v1.getY()-POINT_MARGIN, v2.getY(), v3.getY()};mArrows.addPath(x, y);}if(TsMakeupManager.HAS_TS_MAKEUP) {toIndex(v1, w, h, rotation, 3, 1, -1);toIndex(v2, w, h, rotation, 3, 0, -1);float[] x = {v1.getX(), v2.getX()};float[] y = {v1.getY()-POINT_MARGIN*2, v2.getY()+POINT_MARGIN};mArrows.addPath(x, y);}if (!forCamera2) {toIndex(v1, w, h, rotation, 3, 4, -1);toIndex(v2, w, h, rotation, 3, 5, -1);toIndex(v3, w, h, rotation, 4, 6, -1);float[] x = {v1.getX(), v2.getX(), v3.getX()};float[] y = {v1.getY()+POINT_MARGIN, v2.getY(), v3.getY()-POINT_MARGIN};mArrows.addPath(x, y);}}

4.2修改菜單的位置

Snapdragon camera中把菜單的位置從上/下改爲左/右,修改位置: packages/apps/SnapdragonCamera/src/com/android/camera/ui/OneUICameraControls.java

調整位置到左右, 修改setLocation方法
 

private void setLocation(int w, int h) {int rotation = getUnifiedRotation();setLocationRight(mSceneModeSwitcher, false, 4);setLocationRight(mFilterModeSwitcher, false, 3);if (mIsVideoMode) {setLocationRight(mMute, false, 2);setLocationRight(mFlashButton, false, 1);setLocationRight(mPauseButton, true, 3);setLocationRight(mShutter, true , 2.15f);setLocationRight(mVideoShutter, true, 0.9f);setLocationRight(mExitBestPhotpMode ,true, 0);} else {setLocation(mFrontBackSwitcher, true, 2);setLocationRight(mFlashButton, false, 1);if (mIntentMode == CaptureModule.INTENT_MODE_CAPTURE) {setLocationRight(mShutter, true, 2.15f);setLocation(mCancelButton, false, 0.85f);} else if (mIntentMode == CaptureModule.INTENT_MODE_VIDEO) {setLocationRight(mVideoShutter, true, 0.9f);setLocation(mCancelButton, false, 0.85f);} else {setLocationRight(mShutter, true, 2.15f);setLocationRight(mPreview, true, 4);setLocationRight(mVideoShutter, true, 0.9f);}setLocationRight(mExitBestPhotpMode ,true, 0);}setLocationCustomBottom(mMakeupSeekBarLayout, 0, 1);setLocationRight(mProModeCloseButton, true, 0);layoutToast(mRefocusToast, w, h, rotation);}private void setLocationRight(View view, boolean right,float index){if(view == null){return;}int w = view.getMeasuredWidth();int h = view.getMeasuredHeight();float bW = mWidth / 5f;if(right){view.setX(bW * 4 + (bW - w) / 4 * 3);}else {view.setX((bW - w) / 4);}float bH = mHeight / 5f;view.setY(bH * index + (bH - h)/2);}

filters菜單與filters點擊按鈕重合了,修改位置:packages/apps/SnapdragonCamera/src/com/android/camera/CaptureUI.java文件中的addFilterMode方法

public void addFilterMode() {if (mSettingsManager.getValue(SettingsManager.KEY_COLOR_EFFECT) == null)return;......if (!portrait) {params = new ViewGroup.LayoutParams(size, FrameLayout.LayoutParams.MATCH_PARENT);mFilterLayout.setLayoutParams(params);((ViewGroup) mRootView).addView(mFilterLayout);mFilterLayout.setX(size/2); 修改坐標x的位置} else {

打開Premode後,Premode菜單與左右兩邊的菜單有重合。

修改:packages/apps/SnapdragonCamera/src/com/android/camera/ui/ProMode.java文件中的onLayout方法:

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {super.onLayout(changed, left, top, right, bottom);mWidth = right - left;mHeight = bottom - top;mCurveLeft = mWidth / 10 *2 ;mCurveRight = mWidth - mCurveLeft;mCurveHeight = mWidth / 7;mCurveY = (int) (mHeight * 0.67);float cx = (mCurveLeft + mCurveRight) / 2;mCurvePath.reset();mCurvePath.moveTo(mCurveLeft, mCurveY);mCurvePath.quadTo(cx, mCurveY - mCurveHeight, mCurveRight, mCurveY);mCurveMeasure = new PathMeasure(mCurvePath, false);}

修改packages/apps/SnapdragonCamera/src/com/android/camera/ui/OneUICameraControls.java 文件中的setProModeParameters和initializeProMode方法:

 private void setProModeParameters() {ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(mWidth/ 5, mWidth/8);mExposureText.setLayoutParams(lp);mManualText.setLayoutParams(lp);mWhiteBalanceText.setLayoutParams(lp);mIsoText.setLayoutParams(lp);}private void initializeProMode(boolean promode) {if (!promode) {mProMode.setMode(ProMode.NO_MODE);mProModeLayout.setVisibility(INVISIBLE);mProModeCloseButton.setVisibility(INVISIBLE);return;}mProModeLayout.setVisibility(VISIBLE);mProModeCloseButton.setVisibility(VISIBLE);mProModeLayout.setY((mHeight - mBottom - mProModeLayout.getHeight()) / 3);if (mOrientation == 0 || mOrientation == 180) {mProModeLayout.setX(mWidth / 10);} else {mProModeLayout.setX((mWidth - mWidth / 8 * 4) / 2);}}

修改錄音時間Text位置:/res/layout/capture_module.xml

<FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><com.android.camera.ui.RotateLayoutandroid:id="@+id/recording_time_rect"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"android:visibility="gone"android:layout_marginLeft="128dp"android:layout_marginBottom="150dp"><includeandroid:id="@+id/labels"layout="@layout/viewfinder_labels_video"/></com.android.camera.ui.RotateLayout></FrameLayout>

修改Filters和Premode Text位置:/res/layout/scene_mode_label.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginBottom="30dp"android:layout_marginLeft="100dp"android:gravity="bottom">.......
</LinearLayout>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Find My鼠标|苹果Find My技术与鼠标结合,智能防丢,全球定位

随着折叠屏、多屏幕、OLED 等新兴技术在个人计算机上的应用&#xff0c;产品更新换代大大加速&#xff0c;进一步推动了个人计算机需求的增长。根据 IDC 统计&#xff0c;2021 年全球 PC 市场出货量达到 3.49 亿台&#xff0c;同比增长 14.80%&#xff0c;随着个人计算机市场发…

亚马逊云科技re:Invent大会:云计算与生成式AI共筑科技新局面,携手构建未来

随着科技的飞速发展&#xff0c;云计算和生成式 AI 已经成为了推动科技进步的重要力量。这两者相互结合&#xff0c;正在为我们创造一个全新的科技局面。 亚马逊云科技的re:Invent大会再次证明了云计算和生成式AI的强大结合正在塑造科技的新未来。这次大会聚焦了云计算的前沿技…

为什么要隐藏id地址?使用IP代理技术可以实现吗?

随着网络技术的不断发展&#xff0c;越来越多的人开始意识到保护个人隐私的重要性。其中&#xff0c;隐藏自己的IP地址已经成为了一种常见的保护措施。那么&#xff0c;为什么要隐藏IP地址&#xff1f;使用IP代理技术可以实现吗&#xff1f;下面就一起来探讨这些问题。 首先&am…

Qt 软件调试(二)使用dump捕获崩溃信息

Qt应用程序异常崩溃该怎么办&#xff0c;生成dump文件再回溯分析&#xff0c;可以快速且准确的帮助我们定位到崩溃的点。那么&#xff0c;本章我们分享下如何在Qt中生成dump文件。 一、使用minudump捕获崩溃信息 #include <QCoreApplication> #include <QDir> #i…

【洛谷 P1636】Einstein学画画 题解(图论+欧拉通路)

Einstein学画画 题目描述 Einstein 学起了画画。 此人比较懒~~&#xff0c;他希望用最少的笔画画出一张画…… 给定一个无向图&#xff0c;包含 n n n 个顶点&#xff08;编号 1 ∼ n 1 \sim n 1∼n&#xff09;&#xff0c; m m m 条边&#xff0c;求最少用多少笔可以画…

nodejs微信小程序+python+PHP-书吧租阅管理系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

深度学习+不良身体姿势检测+警报系统+代码+部署(姿态识别矫正系统)

正确的身体姿势是一个人整体健康的关键。然而&#xff0c;保持正确的身体姿势可能很困难&#xff0c;因为我们经常忘记这一点。这篇博文将引导您完成为此构建解决方案所需的步骤。最近&#xff0c;我们在使用 POSE 进行身体姿势检测方面玩得很开心。它就像一个魅力&#xff01;…

Ubuntu20安装ssh服务

Ubuntu20上执行如下命令查看是否存在ssh服务 #ps -e | grep ssh 只有ssh-agent&#xff0c;没有sshd; 因此要安装openssh-server. 搜索openssh-server,得到下载链接&#xff1a; openssh-server 复制这个Binary Package链接即可下载&#xff0c;然后使用如下命令安装 sudo…

PyQt6库和工具库QTDesigner安装与配置

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计12条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

【knife4j-spring-boot】Springboot + knife4j-spring-boot 整合swagger脚手架

swagger-boostrap-ui从1.x版本到如今2.x&#xff0c;同时也更改名字Knife4j 在此记录下 knife4j-spring-boot-starter 的整合。 只需要引入knife4j-spring-boot-starter&#xff0c;无需引入其他的swagger包&#xff0c;knife4j-spring-boot-starter已经包含。 官方版本说明…

详细解答T-SNE程序中from sklearn.manifold import TSNE的数据设置,包括输入数据,绘制颜色的参数设置,代码复制可用!!

文章目录 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的缩写1、可运行的T-SNE程序2. 实验结果3、针对上述程序我们详细分析T-SNE的使用方法3.1 加载数据3.2 TSNE降维3.3 绘制点3.4 关于颜色设置&#xff0c;颜色使用的标签数据的说明cy 总结 前言——TSNE是t-D…

Centos Download

前言 CentOS Linux 是一个社区支持的发行版&#xff0c;源自 CentOS git for Red Hat Enterprise Linux &#xff08;RHEL&#xff09; 上免费提供给公众的源代码。因此&#xff0c;CentOS Linux 的目标是在功能上与 RHEL 兼容。CentOS 计划主要更改组件以删除上游供应商的品牌…

【微服务专题】SpringBoot自动配置源码解析

目录 前言阅读对象阅读导航前置知识笔记正文0、什么是自动配置0.1 基本概念0.2 SpringBoot中的【约定大于配置】0.3 从SpringMVC看【约定大于配置】0.4 从Redis看【约定大于配置】 一、EnableAutoConfiguration源码解析二、SpringBoot常用条件注解源码解析2.1 自定义条件注解2.…

java 反射和注解1-反射详解

反射和注解本就是一家人&#xff0c;注解离不开反射&#xff0c;这里先将反射的写法&#xff0c;本文涉到的注解暂时可以不不用理解 1&#xff0c;创建一个类 public class ReflexUser {public String name;private String namePrivate;protected String nameProtected;Strin…

Arduino库之 LedControl 库说明文档

LedControl 库最初是为基于 8 位 AVR 处理器的 Arduino 板编写的。用于通过MAX7219芯片控制LED矩阵和7段数码管。但由于该代码不使用处理器的任何复杂的内部功能&#xff0c;因此具有高度可移植性&#xff0c;并且应该在任何支持 和 功能的 Arduino&#xff08;类似&#xff09…

模拟火车订票系统---python序列

if __name__ __main__:#创建车辆信息列表list["车次","出发站-到达站","出发时间","到达时间","历时","余票"]trainNumber[T40,T298,Z158,Z62]address[长春-北京,长春-北京,长春-北京,长春-北京]getTime[00:12,0…

简单介绍一下js中的构造函数、原型对象prototype、对象原型__proto__、原型链

构造函数 function Star (uname, age){this.uname unamethis.age agethis.sing function(){ log(唱歌~) }}let xzq new Star(薛之谦, 30)let ldh new Star(刘德华, 20)log(ldh) // { uname: 刘德华, age: 20, sing: f }ldh.sing() // 唱歌~log(ldh.sing xzq.sing) // fal…

DevEco Studio安装

HUAWEI DevEco Studio For OpenHarmony&#xff08;以下简称DevEco Studio&#xff09;是基于IntelliJ IDEA Community开源版本打造&#xff0c;面向OpenHarmony全场景多设备的一站式集成开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供工程模板创建、开发、编译…

服务器被入侵了怎么去排查

在当今数字化时代&#xff0c;网络安全问题变得越来越重要。其中&#xff0c;服务器被入侵是一种常见的安全威胁。当服务器被入侵时&#xff0c;我们需要采取一系列措施来排查和解决问题。本文将为您提供服务器被入侵后的排查步骤。 第一步&#xff1a;确认服务器被入侵 当发现…

C语言进阶之路-基本数据小怪篇

目录 一、学习目标&#xff1a; 二、数据基本类型 整型 浮点型 / 实型 字符 字符串 布尔型数据 三、重要的杂七杂八知识点 常量与变量 标准输入 sizeof运算符&#xff1a; 类型转换 数据类型的本质 整型数据尺寸 可移植性整型 拿下第一个C语言程序 总结 一、学…