Androidconfiguration文件

什么是最好的方式,以及如何为应用程序设置configuration文件?

我希望应用程序能够查看SD卡上的文本文件并挑选出需要的某些信息?

  • 用android ndk r5b编译ffmpeg
  • Android中的configuration文件。 这是否存在?
  • 实现View.IOnTouchListener接口
  • 在销毁活动时停止处理程序可运行的任务
  • 如何在Android Studio的运行/debuggingconfiguration中将parameter passing给Java代码
  • AVD硬件button未启用
  • Android的valgrind构build失败
  • 关于arm-eabi-gcc和交叉编译
  • 您可以使用共享偏好来实现这一点

    有关如何在Google Android页面上使用共享首选项的详细指南https://developer.android.com/guide/topics/data/data-storage.html#pref

    如果您的应用程序将要公开发布,并且您的configuration中包含敏感数据(如API密钥或密码),则build议使用secure-preferences而不是SharedPreferences,因为最终SharedPreferences以明文forms存储在XML中一个根深蒂固的电话是一个应用程序访问他人的共享偏好非常容易。

    默认情况下,它不是防弹安全的(实际上它更像是对首选项的模糊处理),但是它可以快速获得更多的安全性。 例如,它会阻止用户在根源设备上轻松修改您的应用的共享首选项。 ( 链接 )

    我会build议一些其他方法:

    方法1:使用属性的* .properties文件

    优点:

    1. 从任何IDE使用易于编辑
    2. 更安全:因为它是与您的应用程序编译
    3. 如果使用Build variants / Flavors,则可以轻松覆盖
    4. 你也可以在configuration中写入

    缺点:

    1. 你需要一个上下文
    2. 你也可以写在configuration(是的,它也可以是一个骗局)
    3. (还要别的吗?)

    首先,创build一个configuration文件: res/raw/config.properties并添加一些值:

     api_url=http://url.to.api/v1/ api_key=123456 

    然后你可以很容易地用这样的东西访问值:

     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; } } 

    用法:

     String apiUrl = Helper.getConfigValue(this, "api_url"); String apiKey = Helper.getConfigValue(this, "api_key"); 

    当然,这可以优化一次读取configuration文件,并获得所有的值。

    方法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> 

    现在一个函数来检索值:

     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; } 

    用法:

     String apiUrl = Helper.getMetaData(this, "api_url"); String apiKey = Helper.getMetaData(this, "api_key"); 

    方法3:在你的Flavor中使用buildConfigField

    我没有在官方的Android文档/培训中find这个,但是这篇博客文章非常有用。

    基本上build立一个项目Flavor(例如prod ),然后在你的应用程序的build.gradle有这样的:

     productFlavors { prod { buildConfigField 'String', 'API_URL', '"http://url.to.api/v1/"' buildConfigField 'String', 'API_KEY', '"123456"' } } 

    用法:

     String apiUrl = BuildConfig.API_URL; String apiKey = BuildConfig.API_KEY; 

    如果你想存储应用程序的首选项,Android为此提供了SharedPreferences 。
    这里是官方培训资源的链接。