| 知乎专栏 |
创建 properties 文件 res/config/development.properties
api_url=https://api.netkiller.cn/v1/ api_key=123456
package cn.netkiller.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 Config {
private static final String TAG = "Config";
public static String getKey(Context context, String name) {
Resources resources = context.getResources();
try {
InputStream rawResource = resources.openRawResource(R.config.development);
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 = Config.getKey(this, "api_url"); String apiKey = Config.getKey(this, "api_key");
...
<application ...>
...
...
<meta-data android:name="api_url" android:value="https://api.netkiller.cn/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 = getMetaData(this, "api_url"); String apiKey = getMetaData(this, "api_key");
productFlavors {
prod {
buildConfigField 'String', 'API_URL', '"https://api.netkiller.cn/v1/"'
buildConfigField 'String', 'API_KEY', '"123456"'
}
}
引用 config 方法
String apiUrl = BuildConfig.API_URL; String apiKey = BuildConfig.API_KEY;
import java.io.InputStream;
import java.util.Properties;
import android.content.Context;
public class Config {
public static Properties getProperties(Context c){
Properties properties = new Properties();
try {
//方法一:通过activity中的context攻取setting.properties的FileInputStream
InputStream in = c.getAssets().open("appConfig.properties");
//方法二:通过class获取setting.properties的FileInputStream
//InputStream in = PropertiesUtill.class.getResourceAsStream("/assets/setting.properties "));
properties.load(in);
} catch (Exception e1) {
e1.printStackTrace();
}
return props;
}
}
Properties properties = Config.getProperties(context.getApplicationContext());
serverUrl = properties.getProperty("serverUrl");
Log.i("URL", serverUrl);
package cn.netkiller.album.config;
import cn.netkiller.album.MainApp;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
public class Config {
private static final String TAG = "Config";
private Properties properties = null;
public Config() {
try {
properties = new Properties();
InputStream inputStream = MainApp.getContext().getAssets().open("config.properties");
InputStreamReader isr = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
properties.load(isr);
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public String getServerURI() {
return properties.getProperty("mqtt.serveruri").trim();
}
public String getUsername() {
return properties.getProperty("mqtt.username").trim();
}
public String getPassword() {
return properties.getProperty("mqtt.password").trim();
}
public String getProjectName() {
return properties.getProperty("project.name").trim();
}
public String getProjectScenes() {
return properties.getProperty("project.scenes").trim();
}
public String getProjectGroup() {
return properties.getProperty("project.group").trim();
}
public String getTopicBroadcast() {
return properties.getProperty("mqtt.topic.broadcast").trim();
}
public String getTopicRegister() {
return properties.getProperty("mqtt.topic.register").trim();
}
public String getTopicNotification(){
return properties.getProperty("mqtt.topic.notification").trim();
}
}