Dove è android.os.SystemProperties?

Sto guardando il codice della camera Android e quando provo a importre android.os.SystemProperties , non riesco a trovare.

Ecco il file che sto guardando:
https://android.googlesource.com/platform/packages/apps/Camera/+/eclair-release/src/com/android/camera/VideoCamera.java

  • Come eliminare il file di archiviazione interna in android?
  • Come impostare il path SDK di Java in AndroidStudio?
  • Come rilevare le librerie condivise native caricate dall'applicazione Android
  • Salvataggio e recupero della data in Firebase
  • Quali sono i tipi di intenti possibili per intent.setType (tipo)?
  • Request.Browser.IsMobileDevice = falso per Android, perché?
  • Ho creato un nuovo progetto 2.1 e ho provato ad importre nuovamente questo spazio dei nomi, ma non è ancora ansible trovare. Ho controllato https://developer.android.com e SystemProperties non è stato elencato.

    Ho dimenticato qualcosa?

  • Nessuna risorsa trovata che corrisponde al nome dato '@ style / Theme.Holo.Light.DarkActionBar'
  • Scala di immagini Android per la densità dello schermo
  • Come posso implementare una vista pieghevole come quella di Google Play?
  • Quando android arresterà la sua CPU senza bloccare la veglia?
  • Possibile caricare solo linee specifiche di codice in base alla versione di Android OS?
  • Android Proguard - ClassNotFoundException
  • 7 Solutions collect form web for “Dove è android.os.SystemProperties?”

    Questa è la class del codice sorgente Android:

    https://android.googlesource.com/platform/frameworks/base/+/eclair-release/core/java/android/os/SystemProperties.java

    Vedi {@hide} nella class JavaDoc? Ciò significa che questa class non verrà esportta come parte del SDK pubblico.

    L'applicazione della camera lo usa in quanto interno e non utilizzerà l'SDK pubblico per costruirlo.

    Potresti ancora essere in grado di arrivare a questa class

    1. per riflessione o

    2. ottenendo la fonte, rimuovendo @hide e rendendo il tuo SDK personalizzato.

    Tuttavia praticamente per definizione stai ora andando off SDK ' off SDK ' e quindi la tua applicazione potrebbe essere rotta o get comportmenti diversi sulle versioni di sistema operativo in quanto le persone di Android faranno poco sforzo di non cambiare questa class tra le versioni.

    Se utilizzi l'opzione "riflessione", puoi utilizzare la class qui sotto

     package com.etc.etc; import java.io.File; import java.lang.reflect.Method; import android.content.Context; import dalvik.system.DexFile; public class SystemPropertiesProxy { /** * This class cannot be instantiated */ private SystemPropertiesProxy(){ } /** * Get the value for the given key. * @return an empty string if the key isn't found * @throws IllegalArgumentException if the key exceeds 32 characters */ public static String get(Context context, String key) throws IllegalArgumentException { String ret= ""; try{ ClassLoader cl = context.getClassLoader(); @SuppressWarnings("rawtypes") Class SystemProperties = cl.loadClass("android.os.SystemProperties"); //Parameters Types @SuppressWarnings("rawtypes") Class[] paramTypes= new Class[1]; paramTypes[0]= String.class; Method get = SystemProperties.getMethod("get", paramTypes); //Parameters Object[] params= new Object[1]; params[0]= new String(key); ret= (String) get.invoke(SystemProperties, params); }catch( IllegalArgumentException iAE ){ throw iAE; }catch( Exception e ){ ret= ""; //TODO } return ret; } /** * 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 * @throws IllegalArgumentException if the key exceeds 32 characters */ public static String get(Context context, String key, String def) throws IllegalArgumentException { String ret= def; try{ ClassLoader cl = context.getClassLoader(); @SuppressWarnings("rawtypes") Class SystemProperties = cl.loadClass("android.os.SystemProperties"); //Parameters Types @SuppressWarnings("rawtypes") Class[] paramTypes= new Class[2]; paramTypes[0]= String.class; paramTypes[1]= String.class; Method get = SystemProperties.getMethod("get", paramTypes); //Parameters Object[] params= new Object[2]; params[0]= new String(key); params[1]= new String(def); ret= (String) get.invoke(SystemProperties, params); }catch( IllegalArgumentException iAE ){ throw iAE; }catch( Exception e ){ ret= def; //TODO } return ret; } /** * 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 * @throws IllegalArgumentException if the key exceeds 32 characters */ public static Integer getInt(Context context, String key, int def) throws IllegalArgumentException { Integer ret= def; try{ ClassLoader cl = context.getClassLoader(); @SuppressWarnings("rawtypes") Class SystemProperties = cl.loadClass("android.os.SystemProperties"); //Parameters Types @SuppressWarnings("rawtypes") Class[] paramTypes= new Class[2]; paramTypes[0]= String.class; paramTypes[1]= int.class; Method getInt = SystemProperties.getMethod("getInt", paramTypes); //Parameters Object[] params= new Object[2]; params[0]= new String(key); params[1]= new Integer(def); ret= (Integer) getInt.invoke(SystemProperties, params); }catch( IllegalArgumentException iAE ){ throw iAE; }catch( Exception e ){ ret= def; //TODO } return ret; } /** * 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 * @throws IllegalArgumentException if the key exceeds 32 characters */ public static Long getLong(Context context, String key, long def) throws IllegalArgumentException { Long ret= def; try{ ClassLoader cl = context.getClassLoader(); @SuppressWarnings("rawtypes") Class SystemProperties= cl.loadClass("android.os.SystemProperties"); //Parameters Types @SuppressWarnings("rawtypes") Class[] paramTypes= new Class[2]; paramTypes[0]= String.class; paramTypes[1]= long.class; Method getLong = SystemProperties.getMethod("getLong", paramTypes); //Parameters Object[] params= new Object[2]; params[0]= new String(key); params[1]= new Long(def); ret= (Long) getLong.invoke(SystemProperties, params); }catch( IllegalArgumentException iAE ){ throw iAE; }catch( Exception e ){ ret= def; //TODO } return ret; } /** * 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 insensitive). * 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. * @throws IllegalArgumentException if the key exceeds 32 characters */ public static Boolean getBoolean(Context context, String key, boolean def) throws IllegalArgumentException { Boolean ret= def; try{ ClassLoader cl = context.getClassLoader(); @SuppressWarnings("rawtypes") Class SystemProperties = cl.loadClass("android.os.SystemProperties"); //Parameters Types @SuppressWarnings("rawtypes") Class[] paramTypes= new Class[2]; paramTypes[0]= String.class; paramTypes[1]= boolean.class; Method getBoolean = SystemProperties.getMethod("getBoolean", paramTypes); //Parameters Object[] params= new Object[2]; params[0]= new String(key); params[1]= new Boolean(def); ret= (Boolean) getBoolean.invoke(SystemProperties, params); }catch( IllegalArgumentException iAE ){ throw iAE; }catch( Exception e ){ ret= def; //TODO } return ret; } /** * Set the value for the given key. * @throws IllegalArgumentException if the key exceeds 32 characters * @throws IllegalArgumentException if the value exceeds 92 characters */ public static void set(Context context, String key, String val) throws IllegalArgumentException { try{ @SuppressWarnings("unused") DexFile df = new DexFile(new File("/system/app/Settings.apk")); @SuppressWarnings("unused") ClassLoader cl = context.getClassLoader(); @SuppressWarnings("rawtypes") Class SystemProperties = Class.forName("android.os.SystemProperties"); //Parameters Types @SuppressWarnings("rawtypes") Class[] paramTypes= new Class[2]; paramTypes[0]= String.class; paramTypes[1]= String.class; Method set = SystemProperties.getMethod("set", paramTypes); //Parameters Object[] params= new Object[2]; params[0]= new String(key); params[1]= new String(val); set.invoke(SystemProperties, params); }catch( IllegalArgumentException iAE ){ throw iAE; }catch( Exception e ){ //TODO } } } 

    La class inviata come risposta da parte dell'utente Void ha un sacco di cose inutili. Ecco la mia class che utilizza la riflessione su 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"); } } 

    Dopo un sacco di messing around ho finalmente ottenuto codice di riflessione sopra a lavorare sia per impostare e creare nuove properties; del sistema nativo, ci sono alcune caveat:

    1. Devi essere l'utente del sistema, aggiungi: android: sharedUserId = "android.uid.system" al manifesto.

    2. È necessario firmare il tuo APK con la chiave di piattaforma, ho truffato e appena sovrascritto il codice di firma di debug predefinito in eclipse come mostrato qui: http://stoned-android.blogspot.co.uk/2012_01_01_archive.html

    3. Il servizio di properties; dei sisthemes nativi dispone di un ACL che controlla tutto l'accesso di scrittura alle properties; in grado di sovvertire uno spazio chiave (ad esempio il sistema o il debug). Vedi /system/core/init/property_service.c:

      {"network", AID_SYSTEM, 0}, {"runtime", AID_SYSTEM, 0}, {"hw.", AID_SYSTEM, 0} AID_SYSTEM, 0}, {"wlan.", AID_SYSTEM, 0}, {"dhcp.", AID_SYSTEM, 0}, {

    Oppure, se stai rotolando la propria costruzione puoi aggiungere la propria chiave se volete veramente, ma sembra più facile riutilizzare uno di questi.

    È ansible eseguire il command getprop command 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(); 

    Dopo un sacco di ricerca ho trovato un modo per impostare la properties; di sistema per Android. Non sono stato in grado di trovare la soluzione per la versione Android Lollipop. Ma avevo successo nel farlo. Per impostare la properties; del sistema, dobbiamo utilizzare:

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

    ad esempio SystemProperties.set("sys.android", 5.0)

    Ora devi dare autorizzazioni alla nuova properties; di sistema Vai a /home/inkkashy04/Android_Lollypop/external/sepolicy/property_contexts e dà l'authorization adatta alla tua properties;

    sys.android u: object_r: system_prop: s0

    Dopo aver lampeggiato l'image, è ansible visualizzare le properties; del sistema elencate per command:

     adb shell getprop 

    Se si desidera get la properties; del dispositivo, per le informazioni sul sistema operativo è ansible verificare
    http://developer.android.com/reference/android/os/Build.html

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.