Beg*_*ner 39 configuration android configuration-files
什么是最好的方法以及如何为应用程序设置配置文件?
我希望应用程序能够查看SD卡上的文本文件并选择它需要的某些信息?
gri*_*rim 80
如果您的应用程序将向公众发布,并且如果您的配置中包含敏感数据(如API密钥或密码),我建议使用安全首选项而不是SharedPreferences,因为最终SharedPreferences以明文形式存储在XML中一个有根的手机,应用程序很容易访问另一个人的共享首选项.
默认情况下,它不是防弹安全性(实际上它更像是对首选项进行模糊处理),但它可以让您的Android应用程序更加安全.例如,它会阻止用户在root用户设备上轻松修改应用的共享首选项.(链接)
我会建议一些其他方法:
方法1:使用带有属性的*.properties文件
优点:
缺点:
首先,创建一个配置文件:res/raw/config.properties并添加一些值:
api_url=http://url.to.api/v1/
api_key=123456
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下内容轻松访问值:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
String apiUrl = Helper.getConfigValue(this, "api_url");
String apiKey = Helper.getConfigValue(this, "api_key");
Run Code Online (Sandbox Code Playgroud)
当然,这可以优化一次读取配置文件并获取所有值.
方法2:使用AndroidManifest.xml 元数据元素:
就个人而言,我从未使用过这种方法,因为它似乎不太灵活.
在你的AndroidManifest.xml添加内容中:
...
<application ...>
...
<meta-data android:name="api_url" android:value="http://url.to.api/v1/"/>
<meta-data android:name="api_key" android:value="123456"/>
</application>
Run Code Online (Sandbox Code Playgroud)
现在是一个检索值的函数:
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;
}
Run Code Online (Sandbox Code Playgroud)
用法:
String apiUrl = Helper.getMetaData(this, "api_url");
String apiKey = Helper.getMetaData(this, "api_key");
Run Code Online (Sandbox Code Playgroud)
方法3:buildConfigField在你的味道中使用:
我没有在官方Android文档/培训中找到这个,但这篇博客文章非常有用.
基本上设置一个项目Flavor(例如prod)然后在你的应用程序中build.gradle有类似的东西:
productFlavors {
prod {
buildConfigField 'String', 'API_URL', '"http://url.to.api/v1/"'
buildConfigField 'String', 'API_KEY', '"123456"'
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
String apiUrl = BuildConfig.API_URL;
String apiKey = BuildConfig.API_KEY;
Run Code Online (Sandbox Code Playgroud)
您可以使用共享首选项实现此目的
关于如何在Google Android页面上使用共享首选项的详细指南 https://developer.android.com/guide/topics/data/data-storage.html#pref
| 归档时间: |
|
| 查看次数: |
68762 次 |
| 最近记录: |