Archivo de configuración de Android
¿Cuál es la mejor manera y cómo configurar un archivo de configuración para una aplicación?
Quiero que la aplicación sea capaz de buscar en un archivo de texto en la tarjeta sd y seleccionar cierta información que requiere?
- Flujo de referencia de Google Play Google Analytics
- El valor por defecto de ListPreference no aparece
- ¿Código fuente para la actividad de configuración Wi-Fi de Android?
- Programaticamente encontrar si la instalación de fuentes desconocidas se permite
- Proguard no obfusca en Android Studio
- ¿Cuál es la intención de llamar a la pantalla "Elegir bloqueo de pantalla"?
- Configuraciones de compilación de Android Studio
- ¿Dónde instalar Android SDK en Mac OS X?
- Android: Activa el estado de rotación del acelerómetro
- Agregar o quitar las entradas de idioma en el menú "Configuración" -> "Seleccionar configuración regional" en el teléfono Android
- ¿Cómo puedo hacer que mi Cursor sobreviva a un cambio de orientación?
- Cómo escribir el código para la configuración de Clear Email Client en android?
- Cómo configurar una dirección IP estática, máscara de red, puerta de enlace mediante programación en Android 3.xo 4.x
Puede lograr esto usando preferencias compartidas
Hay una guía muy detallada sobre cómo usar las Preferencias compartidas en la página de Google Android https://developer.android.com/guide/topics/data/data-storage.html#pref
Si su aplicación va a ser lanzado al público y si tiene datos confidenciales en su configuración como claves de API o contraseñas, sugeriría usar preferencias seguras en lugar de SharedPreferences ya que en última instancia SharedPreferences se almacenan en un XML en texto claro y en Un teléfono con raíz es muy fácil para una aplicación acceder a las preferencias compartidas de otro.
Por defecto, no es una prueba de seguridad a prueba de balas (de hecho es más como ofuscación de las preferencias), pero es una victoria rápida para incrementar la seguridad de su aplicación para Android. Por ejemplo, detendrá a los usuarios de dispositivos con raíces que modifiquen fácilmente las preferencias compartidas de la aplicación. ( Enlace )
Yo sugeriría algunos de otros métodos:
Método 1: Utilice un archivo * .properties con Propiedades
Pros:
- Fácil de editar desde cualquier IDE que esté utilizando
- Más seguro: puesto que se compila con tu aplicación
- Puede ser reemplazado fácilmente si utiliza Variantes de creación / Sabores
- También puede escribir en la configuración
Contras:
- Necesitas un contexto
- También puede escribir en el config (sí, también puede ser un con)
- (¿Algo más?)
Primero, cree un archivo de configuración: res/raw/config.properties
y agregue algunos valores:
api_url=http://url.to.api/v1/ api_key=123456
A continuación, puede acceder fácilmente a los valores con algo como esto:
package some.package.name.app; import android.content.Context; import android.content.res.Resources; import android.util.Log; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public final class Helper { private static final String TAG = "Helper"; public static String getConfigValue(Context context, String name) { Resources resources = context.getResources(); try { InputStream rawResource = resources.openRawResource(R.raw.config); Properties properties = new Properties(); properties.load(rawResource); return properties.getProperty(name); } catch (Resources.NotFoundException e) { Log.e(TAG, "Unable to find the config file: " + e.getMessage()); } catch (IOException e) { Log.e(TAG, "Failed to open config file."); } return null; } }
Uso:
String apiUrl = Helper.getConfigValue(this, "api_url"); String apiKey = Helper.getConfigValue(this, "api_key");
Por supuesto esto podría ser optimizado para leer el archivo de configuración una vez y obtener todos los valores.
Método 2: Utilice el elemento de meta-datos AndroidManifest.xml:
Personalmente nunca he usado este método porque no parece muy flexible.
En tu AndroidManifest.xml
agrega algo como:
... <application ...> ... <meta-data android:name="api_url" android:value="http://url.to.api/v1/"/> <meta-data android:name="api_key" android:value="123456"/> </application>
Ahora una función para recuperar los valores:
public static String getMetaData(Context context, String name) { try { ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); Bundle bundle = ai.metaData; return bundle.getString(name); } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, "Unable to load meta-data: " + e.getMessage()); } return null; }
Uso:
String apiUrl = Helper.getMetaData(this, "api_url"); String apiKey = Helper.getMetaData(this, "api_key");
Método 3: Use buildConfigField
en su Sabor :
No he encontrado esto en la documentación oficial de Android / formación, pero este artículo de blog es muy útil.
Básicamente la creación de un proyecto Sabor (por ejemplo prod
) y luego en su aplicación build.gradle
tienen algo así como:
productFlavors { prod { buildConfigField 'String', 'API_URL', '"http://url.to.api/v1/"' buildConfigField 'String', 'API_KEY', '"123456"' } }
Uso:
String apiUrl = BuildConfig.API_URL; String apiKey = BuildConfig.API_KEY;
Si desea almacenar las preferencias de su aplicación, Android proporciona SharedPreferences para esto.
Aquí está el enlace a los recursos de capacitación oficiales.
- Android compartir archivos, enviándolos por correo electrónico u otras aplicaciones
- Variables estáticas públicas y gestión del ciclo de vida de la actividad de Android