Android 判断是开发debug模式,还是发布release模式
2个回答
2016-04-03 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
可以参考如下方法:
1、是用于调试 可以用 如下宏来处理代码
#ifdef DEBUG
//do sth.
#else
//do sth.
#endif
2、如果是要玩花活 可以使用下面的代码,下面的代码在vc6.0中测试通过,你生成debug版,它会打印debug mode,你生成release 它会打印 release mode;
#include <stdio.h>
class is_debug{
public:
is_debug(int v) { a = v;}
int a;
};
int main()
{
unsigned this_addr;
is_debug o_o(2);
__asm mov dword ptr this_addr,eax
if ((unsigned)(&o_o)==this_addr) printf("this is debug mode!\n");
else printf("this is release mode\n");
return 0;
}
这种方法的原理 是借助于inline函数,因为在类内部定义的函数
是要inline内联的,如果是debug版就没有这个功能。另外还使用了一点,就是 每当我们定义一个对象,或者说调用
的时候,在windows平台上eax寄存器保存当前对象的this指针,在linux平台是有ecx寄存器保存,当inline内联的时候,是没有函数返回值的,所以eax寄存器的值一般不会是当前对象的this指针。结合 这两点,才有了上面的奇葩式判断方式。
1、是用于调试 可以用 如下宏来处理代码
#ifdef DEBUG
//do sth.
#else
//do sth.
#endif
2、如果是要玩花活 可以使用下面的代码,下面的代码在vc6.0中测试通过,你生成debug版,它会打印debug mode,你生成release 它会打印 release mode;
#include <stdio.h>
class is_debug{
public:
is_debug(int v) { a = v;}
int a;
};
int main()
{
unsigned this_addr;
is_debug o_o(2);
__asm mov dword ptr this_addr,eax
if ((unsigned)(&o_o)==this_addr) printf("this is debug mode!\n");
else printf("this is release mode\n");
return 0;
}
这种方法的原理 是借助于inline函数,因为在类内部定义的函数
是要inline内联的,如果是debug版就没有这个功能。另外还使用了一点,就是 每当我们定义一个对象,或者说调用
的时候,在windows平台上eax寄存器保存当前对象的this指针,在linux平台是有ecx寄存器保存,当inline内联的时候,是没有函数返回值的,所以eax寄存器的值一般不会是当前对象的this指针。结合 这两点,才有了上面的奇葩式判断方式。
展开全部
[java] view plain copy
public class LogUtils {
public static boolean APP_DBG = false; // 是否是debug模式
public static void init(Context context){
APP_DBG = isApkDebugable(context);
}
/**
* 但是当我们没在AndroidManifest.xml中设置其debug属性时:
* 使用Eclipse运行这种方式打包时其debug属性为true,使用Eclipse导出这种方式打包时其debug属性为法false.
* 在使用ant打包时,其值就取决于ant的打包参数是release还是debug.
* 因此在AndroidMainifest.xml中最好不设置android:debuggable属性置,而是由打包方式来决定其值.
*
* @param context
* @return
* @author SHANHY
* @date 2015-8-7
*/
public static boolean isApkDebugable(Context context) {
try {
ApplicationInfo info= context.getApplicationInfo();
return (info.flags&ApplicationInfo.FLAG_DEBUGGABLE)!=0;
} catch (Exception e) {
}
return false;
}
}
项目开发中,我们根据debug属性来输出日志。
但是有些时候我们想在给公司的测试机上安装的release版本也输出日志,那么这个时候我们到 AndroidManifest.xml 中的application 标签中添加属性强制设置debugable即可,如下:
[html] view plain copy
<application android:debuggable="true" tools:ignore="HardcodedDebugMode"
....
.... />
init 方法在客户端的第一个Activity的onCreate方法中执行一下即可。
项目开发中,我们根据debug属性来输出日志。
但是有些时候我们想在给公司的测试机上安装的release版本也输出日志,那么这个时候我们到 AndroidManifest.xml 中的application 标签中添加属性强制设置debugable即可,如下:
[html] view plain copy
<application android:debuggable="true" tools:ignore="HardcodedDebugMode"
....
.... />
init 方法在客户端的第一个Activity的onCreate方法中执行一下即可
public class LogUtils {
public static boolean APP_DBG = false; // 是否是debug模式
public static void init(Context context){
APP_DBG = isApkDebugable(context);
}
/**
* 但是当我们没在AndroidManifest.xml中设置其debug属性时:
* 使用Eclipse运行这种方式打包时其debug属性为true,使用Eclipse导出这种方式打包时其debug属性为法false.
* 在使用ant打包时,其值就取决于ant的打包参数是release还是debug.
* 因此在AndroidMainifest.xml中最好不设置android:debuggable属性置,而是由打包方式来决定其值.
*
* @param context
* @return
* @author SHANHY
* @date 2015-8-7
*/
public static boolean isApkDebugable(Context context) {
try {
ApplicationInfo info= context.getApplicationInfo();
return (info.flags&ApplicationInfo.FLAG_DEBUGGABLE)!=0;
} catch (Exception e) {
}
return false;
}
}
项目开发中,我们根据debug属性来输出日志。
但是有些时候我们想在给公司的测试机上安装的release版本也输出日志,那么这个时候我们到 AndroidManifest.xml 中的application 标签中添加属性强制设置debugable即可,如下:
[html] view plain copy
<application android:debuggable="true" tools:ignore="HardcodedDebugMode"
....
.... />
init 方法在客户端的第一个Activity的onCreate方法中执行一下即可。
项目开发中,我们根据debug属性来输出日志。
但是有些时候我们想在给公司的测试机上安装的release版本也输出日志,那么这个时候我们到 AndroidManifest.xml 中的application 标签中添加属性强制设置debugable即可,如下:
[html] view plain copy
<application android:debuggable="true" tools:ignore="HardcodedDebugMode"
....
.... />
init 方法在客户端的第一个Activity的onCreate方法中执行一下即可
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询