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.pswp.cn/news/168271.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/168271.shtml
英文地址,請注明出處:http://en.pswp.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的強大結合正在塑造科技的新未來。這次大會聚焦了云計算的前沿技…

C++動態規劃算法:最多可以參加的會議數目

本周推薦閱讀 C二分算法&#xff1a;得到子序列的最少操作次數 本題的其它解法 C二分算法&#xff1a;最多可以參加的會議數目 II 本文涉及的基礎知識點 二分查找算法合集 題目 給你一個 events 數組&#xff0c;其中 events[i] [startDayi, endDayi, valuei] &#xf…

Python庫設置HTTP請求頭字段User-Agent

User-Agent 字段是一個 HTTP 請求頭&#xff0c;用于標識發起請求的客戶端&#xff08;例如瀏覽器、應用程序等&#xff09;。服務器可以根據 User-Agent 字段來識別客戶端的類型和版本&#xff0c;以便提供適當的響應。 User-Agent 字符串通常包含以下內容&#xff1a; 客戶…

為什么要隱藏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…

k8s docker總結特殊點

k8s docker總結特殊點 前言一、docker 的驅動。1、cgroup:&#xff08;Control Groups&#xff09;2、日志驅動&#xff08;log driver&#xff09;3、存儲驅動4、網絡驅動&#xff1a; 二、k8s中網絡插件&#xff08;常用calico&#xff0c;次flannel&#xff09;**Flannel:**…

【洛谷 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…

Ruoyi項目傳List到后臺并使用Excel模板下載數據的方法以及遇到的各種前后端數據交互問題

import { download } from @/utils/requestconst app = createApp(App)// 全局方法掛載 app.config.globalProperties.download = download 首先因為ruoyi-ui中的main.js有配置如上全局注冊: 因此只需要在vue中定義一個方法直接使用this.download調用下載即可: (download的3…

Hausdorff是什么距離,怎樣計算的

Hausdorff距離是一種用于度量兩個集合之間的相似性或差異性的距離度量指標。它基于數學家Felix Hausdorff的工作而得名。 對于給定的兩個集合A和B&#xff0c;Hausdorff距離定義為集合A中的每個點到集合B的最近點的最大距離&#xff0c;與集合B中的每個點到集合A的最近點的最大…

C++列表初始化

1.列表初始化 注意和初始化列表區分開來&#xff0c;在 C 98 中允許使用花括號對數組或者結構體元素進行統一的初始值設定。 struct Point {int _x;int _y; };int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; }而 C 11 擴大了…

PyQt6庫和工具庫QTDesigner安裝與配置

鋒哥原創的PyQt6視頻教程&#xff1a; 2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~共計12條視頻&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面開發 視頻教程(無廢話版…

c語言第七彈--掃雷小游戲!

今天做一個有趣的掃雷小游戲 現在正式開始設計。 思路&#xff1a;想要根本上實現必須擁有 實現函數的主體.c文件 頭文件.h 及頭文件實現.c。 頭文件.h #pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> #define EASY_COUNT 10 #d…

【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已經包含。 官方版本說明…

mysql1124實驗七索引管理

實驗任務七 索引管理實驗任務書 1. 實驗目的 掌握在MySQL中使用MySQL Workbench或者SQL語句創建和使用索引的方法&#xff08;以SQL命令為重點&#xff09;。 掌握在MySQL中使用MySQL Workbench或者SQL語句查看和刪除索引的方法&#xff08;以SQL命令為重點&#xff09;。 …

詳細解答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 計劃主要更改組件以刪除上游供應商的品牌…