public class LogUtils {
public static boolean APP_DBG = false; // 是否是debug模式
public static void init(Context context){
APP_DBG = isApkDebugable(context);
}
/
但是当我们没在AndroidManifestxml中设置其debug属性时:
使用Eclipse运行这种方式打包时其debug属性为true,使用Eclipse导出这种方式打包时其debug属性为法false
在使用ant打包时,其值就取决于ant的打包参数是release还是debug
因此在AndroidMainifestxml中最好不设置android:debuggable属性置,而是由打包方式来决定其值
@param context
@return
@author SHANHY
@date 2015-8-7
/
public static boolean isApkDebugable(Context context) {
try {
ApplicationInfo info= contextgetApplicationInfo();
return (infoflags&ApplicationInfoFLAG_DEBUGGABLE)!=0;
} catch (Exception e) {
}
return false;
}
}
项目开发中,我们根据debug属性来输出日志。
但是有些时候我们想在给公司的测试机上安装的release版本也输出日志,那么这个时候我们到 AndroidManifestxml 中的application 标签中添加属性强制设置debugable即可,如下:
[html] view plaincopy
<application android:debuggable="true" tools:ignore="HardcodedDebugMode"
/>
init 方法在客户端的第一个Activity的onCreate方法中执行一下即可。
[Description]如何默认打开user debug 选项 [Keyword]user debug root [Solution]1 在android 40 之前,这个设置是在frameworks/base/service//SystemServerjava 里面设置会根据system property 的persistserviceadbenable 来设置。您可以看到类似如代码: // make sure the ADB_ENABLED setting value matches the secure property value SettingsSecureputInt(mContentResolver, SettingsSecureADB_ENABLED, "1"equals(SystemPropertiesget("persistserviceadbenable")) 1 : 0); // register observer to listen for settings changes mContentResolverregisterContentObserver(SettingsSecuregetUriFor(SettingsSecureADB_ENABLED), false, new AdbSettingsObserver()); 而这个persistserviceadbenable 默认是放在在defaultprop 中,在编译的时候在build/core/mainmk 中确认, ifeq (true,$(strip $(enable_target_debugging))) # Target is more debuggable and adbd is on by default ADDITIONAL_DEFAULT_PROPERTIES += rodebuggable=1 persistserviceadbenable=1 # Include the debugging/testing OTA keys in this build INCLUDE_TEST_OTA_KEYS := true else # !enable_target_debugging # Target is less debuggable and adbd is off by default ADDITIONAL_DEFAULT_PROPERTIES += rodebuggable=0 persistserviceadbenable=0 endif # !enable_target_debugging 您需要将: ADDITIONAL_DEFAULT_PROPERTIES += rodebuggable=0 persistserviceadbenable=0 改成 ADDITIONAL_DEFAULT_PROPERTIES += rodebuggable=1 persistserviceadbenable=1 2 在android 40 之后,因为adb 的控制,统一使用了persistsysusbconfig 来控制,于是对应的设置点也改到了frameworks/base/service//usb/UsbDeviceManagerjava 中,您也可以看到类似的代码如:public UsbHandler(Looper looper) { // persistsysusbconfig should never be unset But if it is, set it to "adb" // so we have a chance of debugging what happened mDefaultFunctions = SystemPropertiesget("persistsysusbconfig", "adb"); // sanity check the sysusbconfig system property // this may be necessary if we crashed while switching USB configurations String config = SystemPropertiesget("sysusbconfig", "none"); if (!configequals(mDefaultFunctions)) { Slogw(TAG, "resetting config to persistent property: " + mDefaultFunctions); SystemPropertiesset("sysusbconfig", mDefaultFunctions); } mCurrentFunctions = mDefaultFunctions; String state = FileUtilsreadTextFile(new File(STATE_PATH), 0, null)trim(); updateState(state); mAdbEnabled = containsFunction(mCurrentFunctions, UsbManagerUSB_FUNCTION_ADB);public void systemReady() { // make sure the ADB_ENABLED setting value matches the current state SettingsSecureputInt(mContentResolver, SettingsSecureADB_ENABLED, mAdbEnabled 1 : 0); 而这个persistsysusbconfig 中adb 的配置是在alps/build/tools/post_process_propspy 中根据rodebuggable = 1 or 0 来设置,1 就是开启adb, 0 即关闭adb debug 而这个rodebuggable 也是在alps/build/core/mainmk 中设置,和23 修改类似不过您这样打开之后,对于user 版本adb shell 开启的还是shell 权限,而不是root 权限,如果您需要root 权限,需要再改一下system/core/adb/adbc 里面的should_drop_privileges() 这个函数,在#ifndef ALLOW_ADBD_ROOT 时return 0; 而不是return 1; 即可。
debug时用鼠标把你要检测的变量选定,然后点击右键,再点击右键下拉菜单里的Watch栏,如果你上面没有Expressions模块面板,它就会d出来一个,而且你选定的变量就会显示在Expressions面板的最末尾,右边是变量的值,你看了自然就回明白的应该比较好 *** 作
注意:必须是在debug时,鼠标右键菜单里才会有Watch栏没有debug就没有这个选项
以上就是关于Android 判断是开发debug模式,还是发布release模式全部的内容,包括:Android 判断是开发debug模式,还是发布release模式、如何开启YII系统默认的DEBUG、Java debug时如何看变量的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)