- 浏览: 63737 次
- 性别:
- 来自: 北京
最新评论
-
创世雨天:
转换后getText就会是乱码 请问有解决办法吗?QQ4027 ...
EditText加入图片混编显示 -
logojimi:
楼主考虑了安装多种桌面,而且没有设置默认桌面的情况?
试试这行 ...
Android程序最小化 -
yuboxin5566:
这个东西可以具体点吗?我可以有你这个东东的全代码么?可以私聊Q ...
EditText加入图片混编显示 -
woaidousha:
那请问个问题,如果是想在listView下面加个expanda ...
ExpandableListView 怎么和其他组件相互整合布局 -
liutao6982:
厉害厉害。这一招都被你想出来啦。很好很强大。支持一下
EditText加入图片混编显示
这个问题从一开始接触到Android开发就困扰我很久了,平常除错少用中文log这个问题影响到不大,但是碰到需要把data (通常是远端的json or 本地端cache的sqlite)印出来观察这一种除错的情境时,这问题就头大了!
问了google也没有好解答,在android的google code里issue 1590就是在陈述这个问题,下面Comment提供的方法我试不出来,有趣的是用adb logcat在console下是不会有乱码的,所以问题一定出在ADT上,最近自已build了ADT trunk来用,刚好又遇到需要dump中文的data来debug的case,所以就尝试着自已来trace问题。
LogCat的相关的code都在LogPanel.java里,
public class LogPanel extends SelectionDependentPanel { private LogCatOuputReceiver mCurrentLogCat; @Override protected Control createControl(Composite parent) {...} private TabItem createTab(LogFilter filter, int index, boolean fillTable) {...} /** * Sent when a new device is selected. The new device can be accessed * with {@link #getCurrentDevice()}. */ @Override public void deviceSelected() { startLogCat(getCurrentDevice()); } public void startLogCat(final IDevice device) { if (device == mCurrentLoggedDevice) { return; } // if we have a logcat already running if (mCurrentLoggedDevice != null) { stopLogCat(false); mCurrentLoggedDevice = null; } resetUI(false); if (device != null) { // create a new output receiver mCurrentLogCat = new LogCatOuputReceiver(); // start the logcat in a different thread new Thread("Logcat") { //$NON-NLS-1$ @Override public void run() { while (device.isOnline() == false && mCurrentLogCat != null && mCurrentLogCat.isCancelled == false) { try { sleep(2000); } catch (InterruptedException e) { return; } } if (mCurrentLogCat == null || mCurrentLogCat.isCancelled) { // logcat was stopped/cancelled before the device became ready. return; } try { mCurrentLoggedDevice = device; device.executeShellCommand("logcat -v long", mCurrentLogCat, 0 /*timeout*/); //$NON-NLS-1$ } catch (Exception e) { Log.e("Logcat", e); } finally { // at this point the command is terminated. mCurrentLogCat = null; mCurrentLoggedDevice = null; } } }.start(); } } }
class Device的method executeShellCommand有三个参数分别是String command, IShellOutputReceiver receiver, int maxTimeToOutputResponse,它会透过class AdbHelper来做一下adb utility的指令操作。在第xx行时,执行了logcat -v long并把输出丢给LogCatOutputReceiver处理,所以我们的重点在于class LogCatOutputReceiver。继续追进去method executeShellCommand会发现它会把所有接收的data丢给interface IShellOutputReceiver的method addOutput处理,现在这个角色就是class LogCatOutputReceiver,而它的method addOutput是继承class MultiLineReceiver而来,问题就出在这里,把ISO -8859-1改成UTF-8就可以了...
public abstract class MultiLineReceiver implements IShellOutputReceiver { /* (non-Javadoc) * @see com.android.ddmlib.adb.IShellOutputReceiver#addOutput( * byte[], int, int) */ public final void addOutput(byte[] data, int offset, int length) { if (isCancelled() == false) { String s = null; try { s = new String(data, offset, length, "ISO-8859-1"); //问题在这里,把所有输出的字串都使用ISO-8859-1 decode } catch (UnsupportedEncodingException e) { // normal encoding didn't work, try the default one s = new String(data, offset,length); } // ok we've got a string if (s != null) { // if we had an unfinished line we add it. if (mUnfinishedLine != null) { s = mUnfinishedLine + s; mUnfinishedLine = null; } // now we split the lines mArray.clear(); int start = 0; do { int index = s.indexOf("\r\n", start); //$NON-NLS-1$ // if \r\n was not found, this is an unfinished line // and we store it to be processed for the next packet if (index == -1) { mUnfinishedLine = s.substring(start); break; } // so we found a \r\n; // extract the line String line = s.substring(start, index); if (mTrimLines) { line = line.trim(); } mArray.add(line); // move start to after the \r\n we found start = index + 2; } while (true); if (mArray.size() > 0) { // at this point we've split all the lines. // make the array String[] lines = mArray.toArray(new String[mArray.size()]); // send it for final processing processNewLines(lines); } } } } }
然后重新编译DDMS即可。
$javac -classpath ./ddms.jar:./ddmlib.jar MultiLineReceiver.java
下面便为重新编译后的的ADT,其中除了中文问题,其他与官方的完全相同。
- ADT-9.0.0-preview3_Chinese_.zip (4.2 MB)
- 下载次数: 228
发表评论
-
Android程序最小化
2011-03-25 14:30 2163/** * 最小化,回到桌面 * */ ... -
Android开发中如何定义和使用数组
2011-03-02 17:12 1550数组在Android开发中是如何定义和使用的呢? 在Andro ... -
EditText加入图片混编显示
2011-02-23 10:32 3976Android的WebView固然强大 ... -
Android 核心分析 之五 -----基本空间划分【转】
2011-01-18 14:23 764基本空间划分 Google给了我们一张系统架构图,在这张图上 ... -
Android核心分析之四 ---手机的软件形态【转】
2011-01-18 14:17 698手机的软件形态 上节我给出了手机的硬件树,本节将 ... -
Android是什么 之三-------手机之硬件形态【转】
2011-01-18 14:16 815Android是什么 之三-------手机之硬件形态 ... -
Android核心分析 之一--------分析方法论探讨之设计意图【转】
2011-01-18 14:09 769分析方法论探讨之设计 ... -
获取string.xml中的可变字符串
2011-01-14 15:47 19721、在string.xml中添加一个字符串,其中含有可变字符% ... -
在代码中获取在AndroidManifest.xml中配置的版本号
2011-01-14 15:42 1629在代码中的获取方法如下: String versionnam ... -
android2.1源码开发过程中的小技巧
2010-12-29 15:07 909归纳总结android2.1源码开发过程中的一些实用的小技巧。 ... -
升级Android SDK到2.3错误的解决办法
2010-12-29 15:01 916升级了2.3的朋友应该知道,升级到2.3后,Eclipse会报 ... -
Android如何解析Intent Filter (转)
2010-12-29 11:22 661匿名性质的运行时绑定使得理解Android如何解析一个隐式 ... -
使用JSON-LIB转换JAVA对象
2010-12-29 11:20 994使用JSON-LIB可以极大的简化JAVA对象转换成 ... -
Android应用程序中Manifest.java文件的介绍(转)
2010-12-29 11:13 1669每一个Android应用程序包含一个manifest文件——A ... -
Android使用外部字体
2010-12-23 11:31 1395有时候,系统自带的字体并不能满足我们特殊的需求,这时候就需要引 ... -
动态获取drawable中的图片
2010-12-22 15:45 12571.首先在drawable中创建一定格式命名的图片。 2.在 ... -
Android配置文件(.properties文件)的使用
2010-12-20 16:39 49671.首先在源代码根目录(src下)下创建一个名为netconf ... -
Android 中离线用户的灰色头像处理方法
2010-12-20 14:04 1035android的图片资源默认是静态的,也就是说是单实例的;如果 ... -
Android Intent Action 大全
2010-12-17 18:59 619String ADD_SHORTCUT_ACTION 动作 ... -
使用mina传输大字节数组
2010-12-17 15:47 2275使用mina传输超过2k以上的数据时(采用tcp方式,如果是U ...
相关推荐
Eclipse无Logcat输出解决.zip
该jar包作用:解决eclipse在Android7.0以及7.0以上的手机上无logcat输出 1.将下载好的ddmlib.jar替换到自己ADT的tools目录lib下E:\adt\sdk\tools\lib 2.将下载好的ddmlib.jar替换到自己ADT的configuration目录org....
2.网上的adt24.0.2版本对logcat日志有问题 3.里面已经包含com.android.ide.eclipse.adt_24.2.0.20160729.jar修复支持了jdk8编译环境 4.里面已经包含了build-tools\25.0.3的dx.jar修改后文件 参考链接: ...
呵呵,收小小的一分,因为别的资源下载也要积分。大家下载了直接和以前ADT一样更新,在eclipse的help->install new software直接安装本地,找到这个文件夹更新,重启eclipse,LOGCAT就完美支持中文啦。
Eclipse ADT 24.2.0版本,可以解决Eclipse打不出log的问题
主要针对安卓7.0以上版本,真机调试eclipse不显示Logcat日志的解决方法
亲身试验成功!eclipse在Android7.0的手机上无logcat输出,对应我的博客《eclipse在Android7.0的手机上无logcat输出》,有问题可以给我留言,看到我会尽快回复。
解决Android Eclipse连接Android7.0版本以上的手机,显示unknown,无logcat输出的问题 解决方式:1.将下载好的压缩解压包解压,复制ddmlib.jar 2.打开android eclipse 安装路径:D:\android-eclipse\eclipse\...
android通过logcat解决问题。文档详细的介绍如何实用logcat来解决android开发中遇到的问题
Android开发中LogCat工具的使用;LogCat是Android中一个命令行工具,可以用于得到程序的log信息,本附录讲解其使用方法和其中的一些技巧。
NULL 博文链接:https://mtj13617254943-126-com.iteye.com/blog/1004521
可以在jni的c语言中打印信息到Eclipse的logcat中,这样在Eclipse中就可以直接看C语言中打印的信息,方便调试。
005_android 之DDMS中logcat的使用视频教材,讲解的比较详细,有兴趣的可以学习下哦。
buildroot方式移植logcat,目前我用的内核时linux-4.19,该资源包里面包含以下文件 adb-logcat_dl.tar.gz android_logger.tar.gz package_adb_logcat.tar.gz package_android-tools.tar.gz
Eclipse ADT-24.2.0 亲测绝对好用,LogCat正常输出。有需要就下载吧。 ADT-24.2.0 newest version, logcat works as expected.
LogcatView 一款可以在手机中打开logcat控制台
> 一款可以在手机中打开logcat控制台 方便快捷 支持内容搜索 支持自定义标题 支持根据tag筛选 支持根据log级别显示 如何引入 Android Studio 引入 第1步 将JitPack存储库添加到您的构建文件 将其添加到存储库末尾...
本教程适用于Eclipse链接Android 7.0的手机无法输出logcat,以及无法查看文件目录,ADT-24.2.0采用第三方ADT。ddmlib.jar也可以在SDK文件目录下面搜索。
Android的Logcat用于显示系统的调试信息,可在分别以下几个地方查看和调用logcat: 1.eclipse的Debug模式或DDMS模式下的会有一个Logcat窗口,用于显示log日志......
ADT24.2.0, 这是最后版本,可以下载使用,解决logcat不输出问题。