Si votre application est destinée à être rendue publique et si vous avez des données sensibles dans votre configuration, comme des clés d'API ou des mots de passe, je vous suggère d'utiliser préférences sécurisées au lieu de Préférences partagées car, en fin de compte, les préférences partagées sont stockées dans un XML en texte clair, et sur un téléphone enraciné, il est très facile pour une application d'accéder aux préférences partagées d'un autre.
Par défaut, il ne s'agit pas d'une sécurité à toute épreuve (en fait, il s'agit plutôt d'une sécurité à toute épreuve). l'obscurcissement des préférences), mais il s'agit d'une solution rapide pour rendre pour rendre votre application Android plus sûre. Par exemple, elle empêchera les utilisateurs de sur les appareils enracinés de modifier facilement les préférences partagées de votre application. ( lien )
Je suggère quelques autres méthodes :
* Méthode 1 : utiliser un .properties avec Propriétés__
Pour :
- Facile à modifier à partir de l'IDE que vous utilisez
- Plus sécurisé : puisqu'il est compilé avec votre application
- Il est facile d'y déroger si vous utilisez Construire des variantes/Flavors
- Vous pouvez également écrire dans la configuration
Cons :
- Vous avez besoin d'un contexte
- Vous pouvez également écrire dans la configuration (oui, cela peut aussi être un con)
- (autre chose ?)
Tout d'abord, créez un fichier de configuration : res/raw/config.properties
et ajouter quelques valeurs :
api_url=http://url.to.api/v1/
api_key=123456
Vous pouvez ensuite accéder facilement aux valeurs avec quelque chose comme ceci :
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;
}
}
Utilisation :
String apiUrl = Helper.getConfigValue(this, "api_url");
String apiKey = Helper.getConfigValue(this, "api_key");
Bien sûr, cela pourrait être optimisé pour lire le fichier de configuration une fois et obtenir toutes les valeurs.
Méthode 2 : Utiliser AndroidManifest.xml méta-données élément :
Personnellement, je n'ai jamais utilisé cette méthode car elle ne me semble pas très flexible.
Dans votre AndroidManifest.xml
ajoutez quelque chose comme :
...
<application ...>
...
<meta-data android:name="api_url" android:value="http://url.to.api/v1/"/>
<meta-data android:name="api_key" android:value="123456"/>
</application>
Maintenant une fonction pour récupérer les valeurs :
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;
}
Utilisation :
String apiUrl = Helper.getMetaData(this, "api_url");
String apiKey = Helper.getMetaData(this, "api_key");
Méthode 3 : Utiliser buildConfigField
dans votre Saveur :
Je n'ai pas trouvé cela dans la documentation/formation officielle d'Android, mais cet article de blog est très utile.
Fondamentalement, la mise en place d'une saveur de projet (par exemple prod
), puis dans le dossier de votre application build.gradle
avoir quelque chose comme :
productFlavors {
prod {
buildConfigField 'String', 'API_URL', '"http://url.to.api/v1/"'
buildConfigField 'String', 'API_KEY', '"123456"'
}
}
Utilisation :
String apiUrl = BuildConfig.API_URL;
String apiKey = BuildConfig.API_KEY;
3 votes
À quoi sert ce fichier de configuration ? Avez-vous besoin de sauvegarder les paramètres de l'utilisateur ou autre ? Il y a beaucoup de bons guides sur l'utilisation de SharedPreferences et autres.
0 votes
Il s'agit pour l'instant de charger un nom pour le pda dans l'application, et je veux pouvoir changer ce nom à l'avenir sans avoir à modifier le code dans l'application.
0 votes
Assurez-vous de vérifier la question liée. La réponse à la question sur les propriétés correspond à ce que je voulais obtenir de cette question. Elle ressemble également à ce que @Beginner recherchait.
0 votes
Voulez-vous dire
/default.prop
?