Android.os.SystemProperties कहां है?




android-source (4)

आप getprop कमांड को getprop कर सकते हैं:

String line = "";
try {
 Process ifc = Runtime.getRuntime().exec("getprop ro.hardware");
 BufferedReader bis = new BufferedReader(new InputStreamReader(ifc.getInputStream()));
 line = bis.readLine();
} catch (java.io.IOException e) {
}
ifc.destroy();

मैं एंड्रॉइड कैमरा कोड देख रहा हूं, और जब मैं android.os.SystemProperties आयात करने का प्रयास android.os.SystemProperties हूं, तो यह नहीं मिल सकता है।

यहां वह फ़ाइल है जिसे मैं देख रहा हूं:
https://android.googlesource.com/platform/packages/apps/Camera/+/eclair-release/src/com/android/camera/VideoCamera.java

मैंने एक नई 2.1 परियोजना बनाई और इस नामस्थान को फिर से आयात करने का प्रयास किया, लेकिन यह अभी भी नहीं मिला। मैंने https://developer.android.com और SystemProperties को सूचीबद्ध नहीं किया था।

क्या मैं कुछ भुल गया?


उपयोगकर्ता शून्य से एक उत्तर के रूप में पोस्ट की गई कक्षा में अनावश्यक चीजों का एक गुच्छा है। यहां मेरी कक्षा है जो android.os.SystemProperties पर प्रतिबिंब का उपयोग करती है:

/*
 * Copyright (C) 2015 Jared Rummler
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Gives access to the system properties store. The system properties store contains a list of
 * string key-value pairs.
 */
public class SystemProperties {

  private static final Class<?> SP = getSystemPropertiesClass();

  /**
   * Get the value for the given key.
   */
  public static String get(String key) {
    try {
      return (String) SP.getMethod("get", String.class).invoke(null, key);
    } catch (Exception e) {
      return null;
    }
  }

  /**
   * Get the value for the given key.
   *
   * @return if the key isn't found, return def if it isn't null, or an empty string otherwise
   */
  public static String get(String key, String def) {
    try {
      return (String) SP.getMethod("get", String.class, String.class).invoke(null, key, def);
    } catch (Exception e) {
      return def;
    }
  }

  /**
   * Get the value for the given key, returned as a boolean. Values 'n', 'no', '0', 'false' or
   * 'off' are considered false. Values 'y', 'yes', '1', 'true' or 'on' are considered true. (case
   * sensitive). If the key does not exist, or has any other value, then the default result is
   * returned.
   *
   * @param key
   *     the key to lookup
   * @param def
   *     a default value to return
   * @return the key parsed as a boolean, or def if the key isn't found or is not able to be
   * parsed as a boolean.
   */
  public static boolean getBoolean(String key, boolean def) {
    try {
      return (Boolean) SP.getMethod("getBoolean", String.class, boolean.class)
          .invoke(null, key, def);
    } catch (Exception e) {
      return def;
    }
  }

  /**
   * Get the value for the given key, and return as an integer.
   *
   * @param key
   *     the key to lookup
   * @param def
   *     a default value to return
   * @return the key parsed as an integer, or def if the key isn't found or cannot be parsed
   */
  public static int getInt(String key, int def) {
    try {
      return (Integer) SP.getMethod("getInt", String.class, int.class).invoke(null, key, def);
    } catch (Exception e) {
      return def;
    }
  }

  /**
   * Get the value for the given key, and return as a long.
   *
   * @param key
   *     the key to lookup
   * @param def
   *     a default value to return
   * @return the key parsed as a long, or def if the key isn't found or cannot be parsed
   */
  public static long getLong(String key, long def) {
    try {
      return (Long) SP.getMethod("getLong", String.class, long.class).invoke(null, key, def);
    } catch (Exception e) {
      return def;
    }
  }

  private static Class<?> getSystemPropertiesClass() {
    try {
      return Class.forName("android.os.SystemProperties");
    } catch (ClassNotFoundException shouldNotHappen) {
      return null;
    }
  }

  private SystemProperties() {
    throw new AssertionError("no instances");
  }

}

चारों ओर घूमने के बाद मुझे अंततः दोनों मूलभूत सिस्टम गुणों को सेट करने और बनाने के लिए काम करने के ऊपर प्रतिबिंब कोड मिला है, कुछ चेतावनी हैं:

  1. आपको सिस्टम उपयोगकर्ता होने की आवश्यकता है, जोड़ें: android: sharedUserId = "android.uid.system" मैनिफेस्ट में।

  2. आपको प्लेटफॉर्म कुंजी के साथ अपने एपीके पर हस्ताक्षर करने की आवश्यकता है, मैंने धोखा दिया है और ग्रहण में डिफ़ॉल्ट डीबग साइनिंग कुंजी को यहां दिखाया है: http://stoned-android.blogspot.co.uk/2012_01_01_archive.html

  3. देशी सिस्टम गुण सेवा में एक एसीएल होता है जो उन सभी गुणों तक पहुंच लिखता है जिन्हें आप एक महत्वपूर्ण स्थान (जैसे sys। या डीबग।) को विचलित कर सकते हैं। देखें /system/core/init/property_service.c:

    {"नेट।", एआईडी_SYSTEM, 0}, {"dev।", AID_SYSTEM, 0}, {"रनटाइम।", एआईडी_SYSTEM, 0}, {"hw।", AID_SYSTEM, 0}, {"sys।", एआईडी_SYSTEM, 0}, {"सेवा।", एआईडी_SYSTEM, 0}, {"wlan।", AID_SYSTEM, 0}, {"dhcp।", AID_SYSTEM, 0},

या यदि आप अपना खुद का निर्माण कर रहे हैं तो आप अपनी खुद की कुंजी जोड़ सकते हैं यदि आप वास्तव में चाहते थे लेकिन उपर्युक्त में से किसी एक का पुन: उपयोग करना आसान लगता है।


बहुत सारी खोज के बाद मुझे एंड्रॉइड के लिए सिस्टम प्रॉपर्टी सेट करने का एक तरीका मिला। मैं एंड्रॉइड लॉलीपॉप संस्करण के लिए समाधान नहीं ढूंढ पाया। लेकिन मैं ऐसा करने में सफल रहा। सिस्टम प्रॉपर्टी सेट करने के लिए हमें इसका उपयोग करना होगा:

import android.os.SystemProperties
SystemProperties.set(key, value).

उदाहरण के लिए SystemProperties.set("sys.android", 5.0)

अब आपको नई सिस्टम प्रॉपर्टी को अनुमतियां देने की ज़रूरत है /home/inkkashy04/Android_Lollypop/external/sepolicy/property_contexts और अपनी संपत्ति के लिए उपयुक्त अनुमति दें

sys.android u: object_r: system_prop: s0

अब अपनी छवि चमकाने के बाद आप कमांड द्वारा सूचीबद्ध अपने सिस्टम गुण देख सकते हैं:

adb shell getprop




android-source