android屬性ro
⑴ android通過SP獲取虛擬機的序列號代碼
獲取android ro屬性中的某個值就會出現代碼。
Android鏡像中的boot.img、system.img、userdata.img等等也是存放在這樣的分區中。Android系統的燒錄,一般會採用fastboot去做,簡單、方便、快捷。
如果你需要傳一些自定義的數據,同樣也可以通過這種方法去實現。在Android中,傳遞的是androidboot.ro.serialno。
⑵ 如何使用android.os.SystemProperties
如果屬性名稱以「ro.」開頭,那麼這個屬性被視為只讀屬性。一旦設置,屬性值不能改變。
如果屬性名稱以「persist.」開頭,當設置這個屬性時,其值也將寫入/data/property。
Java
import android.os.SystemProperties;
SystemProperties.set("persist.sys.language", zone.getID());
String lang= SystemProperties.get("persist.sys.language");
C
#include <cutils/properties.h>
property_set("persist.sys.language", "zh");
property_get("persist.sys.language", propLang, "en");
~如果你認可我的回答,請及時點擊【採納為滿意回答】按鈕
~~手機提問的朋友在客戶端右上角評價點【滿意】即可。
⑶ Android自定義屬性TypedArray詳解
大家好,我是程序員雙木L,後續會發專題類的文章,這是自定義控制項的第一篇,之後也會陸續更新相關的文章,歡迎關注。
自定義屬性在自定義控制項過程中屬於比較常見的操作,我們可以回想一下這樣的場景:自定義view的過程中,我們需要在不同的情況下設置不同的文字大小,那麼我們是不是就需要提供對外的方法來設置,這樣就比較靈活操作。而我們自定義對外的方法,就是我們自定義的屬性啦,那我們來分析一下其原理及作用。
下面我們根據例子來進行分析:
1、首先我們需要在res->values目錄下新建attrs.xml文件,該文件就是用來聲明屬性名及其接受的數據格式的,如下:
attr名詞解析:
name表示屬性名,上面的屬性名是我自己定義的。
format表示接受的輸入格式,format格式集合如下:
2、自定義屬性的使用,這里我們使用兩種方式進行對比解析
最最最原始的使用方式
(1)、自定義文件如下:
我們可以在TestAttrsView方法的參數AttributeSet是個xml解析工具類,幫助我們從布局的xml里提取屬性名和屬性值。
(2)、在布局文件xml中的使用
這里使用自定義屬性需要聲明xml的命名空間,其中app是命名空間,用來加在自定義屬性前面。
xmlns:app=" http://schemas.android.com/apk/res-auto "
聲明xml命名空間,xmlns意思為「xml namespace」.冒號後面是給這個引用起的別名。
schemas是xml文檔的兩種約束文件其中的一種,規定了xml中有哪些元素(標簽)、
元素有哪些屬性及各元素的關系,當然從面向對象的角度理解schemas文件可以
認為它是被約束的xml文檔的「類」或稱為「模板」。
(3)、將屬性名與屬性值列印結果如下:
從列印結果我們可以看出,AttributeSet將布局文件xml下的屬性全部列印出來了,細心的童鞋可能已經看出來:
這個屬性我們設置的是一個整數尺寸,可最後列印出來的是資源編號。
那如果我們想要輸出我們設置的整數尺寸,需要怎麼操作呢?
這個時候就該我們這篇的主角出場了,使用TypedArray方式。
(1)、這里我們需要將attrs.xml使用「declare-styleable」標簽進行改造,如下:
從改造後的attrs文件可以看出,我們將屬性聲明歸結到TestStyleable裡面,也就意味著這些屬性是屬於TestStyleable下的。
(2)、屬性的解析:
這里我直接列印出解析結果,這里可以獲取我們想要的自定義屬性,而系統有的屬性可以忽略。
(3)、運行結果如下
從解析的結果可以看出,尺寸的結果已經轉換為實際值了:
這個時候有童鞋又問了,我設置的是15dp,為啥最後列印是41.25了呢?其實解析出來的值單位是px,所以這里輸出的是轉換後的值。
解析的過程中用到了這個方法:
我們來看一下這個方法的源碼:
源碼中我們可以看到這個方法有兩個參數:
obtainStyledAttributes方法返回值類型為TypedArray。該類型記錄了獲取到的屬性值集合,而通過數組下標索引即可找到對應的屬性值。索引下標通過R.styleable.TestStyleable_xx獲取,"xx"表示屬性名,一般命名為"styleable名" + "_" + "屬性名"。
而TypedArray提供了各種Api,如getInteger,getString,getDimension等方法來獲取屬性值,這些方法都需要傳入對應屬性名在obtainStyledAttributes中的int數組的位置索引,通過下標獲取數組里屬性值。
這個TypedArray的作用就是資源的映射作用,把自定義屬性在xml設置值映射到class,這樣怎麼獲取都很簡單啦。
到這里就分析完啦!
⑷ Android系統開機屏幕倒轉180°顯示
需求,開機時默認屏幕是倒過來的,需要修改一個屬性:ro.sf.hwrotation,在系統根目錄下的framework文件夾和device文件夾搜索該欄位
可以看到在framework和device文件夾中哪些使用了這個欄位。
將device目錄下的這幾個system.prop文件中的ro.sf.hwrotation值從0改為180就可以實現屏幕倒過來顯示,記住開機畫面是不歸屬這個屬性控制的,需要自己將開機的圖片倒過來,修改系統根目錄下的kernel文件夾下的logo.bmp圖片就好
./rockchip/rk3288/rk3288_box/system.prop:31:ro.sf.hwrotation=180
./rockchip/rk3288/system.prop:39:ro.sf.hwrotation=180
./rockchip/common/system.prop:31:ro.sf.hwrotation=180
⑸ android 如何更改ro開頭的屬性
使用ROM定製大師!!!一般人我不告訴他
用ROM定製大師將ROM解包後就能修改ro.屬性了,不過不是所有ROM包都能修改,有些不可以
⑹ Android屬性:所設屬性值為何在重起後被清除
adbsehllsetProp所設屬性值在重起之後被清除。
是因為必須採用persist.開頭的屬性名才能永久保存。
如果擁有root許可權,可直接編輯/system/build.prop並加入需要永久保存的屬性。
具體操作參考原創文章:
Android屬性:所設屬性值為何在重起後被清除
地址:blog.csdn.net/cloudwu007/article/details/7850496
文章預覽:
⑺ 如何定製android源碼的編譯選項 amp;後期安裝
文件build/core/version_defaults.mk用來檢查一些跟版本相關的變數是否定義;如果未定義,則使用默認值。
這些變數包括
PLATFORM_VERSION # 如 2.2.5
PLATFORM_SDK_VERSION # 8, 對應2.2.5
PLATFORM_VERSION_CODENAME # REL,即發行版
DEFAULT_APP_TARGET_SDK # 同SDK_VERSION或VERSION_CODENAME
BUILD_ID # 默認為UNKNOWN
BUILD_NUMBER # 默認eng.$(USER).$(shell date +%Y%m%d.%H%M%S)的形式。
version_defaults.mk首先包含進build_id.mk。用戶應當配置build_id.mk,而不應該改動version_defaults.mk文件。然後檢查上述變數,如未定義則賦值默認值。
---------------------------------------------------------------------------
關於調試功能(adb)的開啟
編譯android源碼之前總是要先運行build/envsetup.sh,以初始化一些常用命令(實際上是bash的函數,如add_lunch_combo)。
其中也從以下文件中引入了一些編譯設置:
device/${CHIPSET_VENDOR}/vendorsetup.sh
我們這里使用的CHIPSET_VENDOR為amlogic。
比如我們有文件device/amlogic/vendorsetup.sh,內容為"產品名-編譯類型(flavor)"列表(稱為combo),如下:
add_lunch_combo m1ref-eng
add_lunch_combo m1ref-user
add_lunch_combo m2ref-eng
add_lunch_combo m2ref-user
add_lunch_combo stvm3-eng
add_lunch_combo stvm3-user
其中,m1ref和stvm3是產品名(作前綴),後面為編譯類型。
除此前綴外可選的combo值有: eng, user, userdebug, tests。
(參考文件build/core/main.mk中對於變數TARGET_BUILD_VARIANT的篩查條件)
我們可以修改vendorsetup.sh文件,來改變為特定設備編譯的結果。
以下是各個編譯類型的特點:
eng: 工程模式,用於平台級的調試,是默認的編譯類型。
待安裝的模塊tag有: eng, debug, user, development.
安裝不帶tag的非APK模塊;
所安裝應用由產品定義文件給出;
默認屬性: ro.secure=0, ro.deuggable=1, ro.kernel.android.checkjni=1
adbd默認開啟,adb以root身份運行。
user: 即最終用戶版;
待安裝的應用tag有: user
安裝不帶tag的非APK模塊;
所安裝應用由產品定義文件給出;
默認屬性有ro.secure=1, ro.debuggable=0;
默認關閉adbd服務(但可通過應用settings來打開,且adb以shell身份運行);
userdebug: 與user類似,除了:
支持有限的調試功能;
待安裝的應用tag有:debug;
默認屬性有ro.secure=1, ro.debuggable=1;
默認打開adbd服務,adb以shell身份運行;
例如,由文件build/core/main.mk可以看出,當使用含有userdebug的combo值時,此文件中的臨時變數enable_target_debugging會保持為true,相應地,編譯過程會執行:
ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 persist.service.adb.enable=1
這意味著目標系統中根目錄下的文件/default.prop文件(對應變數 INSTALLED_DEFAULT_PROP_TARGET )會含有以下行(參考文件build/core/Makefile):
persist.service.adb.enable=1
由此,目標系統會默認開啟adbd服務,你就可以通過其它PC來連接目標系統了。
所以,如要默認開啟adbd服務,可在設備(如stvm3)定製文件device/amlogic/vendorsetup.sh中增加以下行:
add_lunch_combo stvm3-userdebug
這樣在執行bash的lunch函數時,選擇此combo就可以默認打開adbd服務(adb以shell身份運行)。
但是,即使adbd已經開啟,你仍可能無法通過網路連接到Android進行調試,這涉及到Android的二個屬性:
service.adb.tcp.port (優先順序高)
persist.adb.tcp.port (優先順序低)
註:可查看源碼文件system/core/adb/adb.c。
默認地,這兩個屬性值是5555。有兩種方法來設置此變數:
1)(永久性改變)在Android配置文件/init.rc或/init.$MANUFACTUROR.rc中添加一行:
setprop service.adb.tcp.port 5555
2)(臨時性改變)在命令行上(你可能需要先通過串口開一個終端)執行如下命令:
setprop service.adb.tcp.port 5555
檢查adbd是否支持通過網路鏈接Android:執行命令
netstat -l -n | grep ":5555"
如果有LISTEN狀態的輸出,則表示adbd支持網路模式 :) 。