我想知道大多数Android(或Java可能是足够适合的知识领域)开发人员如何自动构建他们的应用程序以使用调试和发布值。理想的解决方案不涉及手动切换(例如:在构建之前将“public static final DEBUG = false;”切换为“true”)。
你已经有一段时间没有问了,但我想分享一下我是如何做到的。
像Sebastian所暗示的那样,一个Ant脚本可以为您处理这个更改并生成您所需要的静态常量。您可以配置IntelliJ或Eclipse以使其几乎无缝。
我尝试详细说明了我所采取的不同步骤(在此处),如果有帮助,请告诉我。我知道在发布之前我不必进行任何手动更改,这是一种很好的放心感!
我不建议使用IMEI方法...主要问题是并非所有Android设备都有IMEI。更好的方法是检查用于签署.apk的签名。
// See if we're a debug or a release build
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
if (packageInfo.signatures.length>0) {
String signature = new String(packageInfo.signatures[0].toByteArray());
isReleaseBuild = !signature.contains("Android Debug");
}
} catch (NameNotFoundException e1) {
e1.printStackTrace();
}
我使用了一种稍微平凡一些的方法(如果您仍然对解决方案感兴趣的话)。
在应用程序启动时,我的应用程序会检查存储在 /sdcard/ 中的文本文件是否存在。我拥有的每个应用程序都会寻找一个特定的文件,例如 "applicationdebug.txt"。如果该文件存在,则应用程序进入调试模式,并开始使用日志语句和我的调试 Facebook 密钥等详细信息。
然后,我只需将设备上的文件删除(或重命名),就可以查看应用程序在发布模式下的表现如何。
我使用Eclipse在工作区创建了3个项目:
这是一个库项目 包含所有源代码 在values/refs.xml中我添加了
<bool name="debug_mode">true</bool>
使用 ApplicationProject 覆盖 AndroidManifest 和其他 xml 文件,使用开发特定的配置 在 values/refs.xml 中添加
<bool name="debug_mode">true</bool>
使用 ApplicationProject 覆盖 AndroidManifest 和其他 xml 文件,使用生产环境特定的配置。 在 values/refs.xml 中添加:
<bool name="debug_mode">false</bool>
我签署了这个项目的APK文件,以便放在应用商店上。
在您的项目中添加一个新的Application
类,并让它初始化字段(建议将其放在Const类中)。
在您的应用程序的onCreate方法中,调用Const.setupDebug(getApplicationContext());
像这样实现setupDebug
public class Const {
private static boolean debug = false;
public static boolean isDebug() {
return debug;
}
private static void setDebug(boolean debug) {
Const.debug = debug;
}
private static String [] DEBUG_DEVICES = new String[] {
"000000000000000", "gfjdhsgfhjsdg" // add ur devices
};
public static void setupDebug(Context context) {
Arrays.sort(DEBUG_DEVICES);
<pre><code>TelephonyManager mTelephonyMgr = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
String imei = mTelephonyMgr.getDeviceId();
if (imei == null) imei = "000000000000000";
if(Arrays.binarySearch(DEBUG_DEVICES, imei) > -1) {
setDebug(true);
}
}
从常量字段切换到常量方法。
Const.isDebug()