日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 使用反射机制获取或设置系统属性(SystemProperties)

發布時間:2025/4/16 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 使用反射机制获取或设置系统属性(SystemProperties) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網上有很多介紹,但是感覺比較混亂!由于自己能力有限,只做一些簡單易懂的介紹。

一.獲取和設置SystemProperties屬性的代碼

下面是通過反射來獲取和設置系統屬性的代碼

public final class ReflectUtil {public static String getProperty(String key, String defaultValue) {String value = defaultValue;try {Class<?> c = Class.forName("android.os.SystemProperties");Method get = c.getMethod("get", String.class, String.class);value = (String)(get.invoke(c, key, defaultValue));} catch (Exception e) {e.printStackTrace();}finally {return value;}}public static void setProperty(String key, String value) {try {Class<?> c = Class.forName("android.os.SystemProperties");Method set = c.getMethod("set", String.class, String.class);set.invoke(c, key, value);} catch (Exception e) {e.printStackTrace();}}}
  • 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
  • 26
  • 27

沒錯就那么簡單!但是一般人和一般設備不支持,因為權限問題!后面會說到。

二.獲取和設置SystemProperties屬性要注意的地方

1.普通市面上的手機,一般沒有root權限

即使獲取得到,也會有其他問題,所以設置這個系統屬性SystemProperties的設備一般是公司自己的主板,或者公司擁有板子Android源碼和編譯使用權限的。

2.必須要有system和root權限

即使自己的主板,在有root權限下,還有把自己設計的程序添加system權限,才能設置SystemProperties屬性。

(1)在AndroidManifest.xml中,在manifest加入android:sharedUserId=”android.uid.system”。

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.xxx.liwen"android:sharedUserId="android.uid.system">...</manifest>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(2)添加了shareUserId之后,我們的程序是不能正常安裝到Android設備上的

他會一直提示,要卸載之前的應用之類的語句。

但其實是需要簽名的原因!我們需要在Android安裝前把簽名添加進去才能都正常安裝。

手動添加簽名文件生成apk是一個方法。

但是最好是使用app中的build.gradle進行設置每次安裝的時候添加簽名進去。

apply plugin: 'com.android.application'android {compileSdkVersion 26defaultConfig {applicationId "com.project.liwen"minSdkVersion 21targetSdkVersion 26}//聲明簽名文件signingConfigs {release {storeFile file("../certificate/xxx.jks") //文件路徑storePassword '文件密碼'keyAlias '作者'keyPassword '使用密碼'}}buildTypes {//調試模式下,生成的apk添加簽名文件debug {signingConfig signingConfigs.release}//版本模式下,生成的apk添加簽名文件release { signingConfig signingConfigs.release...}} }dependencies {implementation fileTree(include: ['*.jar'], dir: 'libs')implementation 'com.android.support:appcompat-v7:26.1.0'... }
  • 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
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

上面的配置實現默認添加簽名文件,需要在自己的app同一級文件目錄下添加一個文件夾certificate,然后把簽名文件添加進去。

三.獲取和設置SystemProperties屬性的示例

這里演示設置Android設備啟動和關閉WiFi adb功能的代碼

wifi adb指的是,該設備設置了時候,可以通過同一個wifi網絡來實現電腦對Android設備的adb實現,而不需要用像以前那樣使用數據線。

屬性persist.adb.tcp.port是控制是否能實現WiFi adb的關鍵。

這里使用了最開始展示的反射工具類。

//獲取屬性,判斷設備是否可以實現wifi adb功能String property = ReflectUtil.getProperty("persist.adb.tcp.port", "0");Log.i(TAG, "property : " + property);//設置設備可以使用WiFi adb功能ReflectUtil.setProperty("persist.adb.tcp.port", "5555");//關閉設備WiFi adb功能ReflectUtil.setProperty("persist.adb.tcp.port", "0");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

到這里設置SystemProperties的屬性的用法已經和大家說的很明白了。

但是關于SystemProperties屬性設置的文件位置,我也不太搞得清楚!網上看了很多,但是發現和我的開發板情況不一樣。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Android 使用反射机制获取或设置系统属性(SystemProperties)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。