Android ADB 完美支持中文 详细讲解(三)
来源:互联网 发布:淘宝人生 编辑:程序博客网 时间:2024/06/08 14:19
修改ADB 代码全面支持中文
Adb 程序是控制台的程序,入口函数为main,第二个参数为char** 类型,所以从控制台输入Adb 命令的时候传入的字符串编码是GBK编码。第一步把main 函数修改成wmain ,那么传入的字符串编码就是unicode编码。
第一步:
int main(int argc,char **argv)
{
}
修改
int wmain(int argc, wchar_t **argv)
{
}
argv 是传入的参数,adb_commandline 函数接收的参数为char** 类型的,所以第二步把unicode 字符串的参数转换成UTF8编码然后传递给adb_commandline函数。由于argv 是数组,所以这里转换需要注意一下,先贴代码
第二步:
char arg1[256];
char arg2[256];
char arg3[256];
char arg4[256];
char arg5[256];
char arg6[256];
char arg7[256];
char arg8[256];
char arg9[256];
char arg10[256];
char* pTemp[10];
pTemp[0] = arg1;
pTemp[1] = arg2;
pTemp[2] = arg3;
pTemp[3] = arg4;
pTemp[4] = arg5;
pTemp[5] = arg6;
pTemp[6] = arg7;
pTemp[7] = arg8;
pTemp[8] = arg9;
pTemp[9] = arg10;
for (int i=0;i<argc;i++)
{
std::string strTmp;
Unicode_to_UTF8(argv[i],wcslen(argv[i]),strTmp);
pTemp[i][strTmp.length()] = 0;
strcpy(pTemp[i],strTmp.c_str());
}
return adb_commandline(argc - 1, pTemp + 1);
上面的代码里面用了10个(假设最大10个参数)局部变量数组,为什么不new 而是用局部变量。大家都知道new了之后就需要delete,在后面的处理过程中会改变new 的指针指向的地址,所以再delete的话就会出错了,当然这个也是有办法解决的,把new 出来的全部存起来,退出的时候delete 也可以,这里为了简单就直接用局部变量了。
现在传到 adb_commandline 函数里面的编码都是UTF8 编码的,对于英文和数字来说,UTF8编码和GBK编码在内存里面是一样的形式,所以这么修改之后如果只是传递英文和数字做为参数的话是不会有问题的。但是对于中文还要继续修改。打开文件CreateFileA, state这些函数需要修改成unicode 版本。之后修改 sysdeps_win32.cpp
第三部
CreateFileA ---》 修改成宽字符版本函数 CreateFile,搜索一下CreateFileA 全部修改一下。
file_sync_client.cpp 这个文件也要修改,修改的地方比较多, 最好是拿着代码一遍调试一遍修改。 和文件操作相关的都修改成宽字符版本就可以了。
第四步
针对每个命令去调试就可以修改差不多了,故意使用一些中文的名字来调试。
最后说一下进入 adb shell 时候中文处理
转让Android,IOS 手机助手各种技术资料,文档,以及源码,有需要的可以联系我QQ: 2506314894
- Android ADB 完美支持中文 详细讲解(三)
- Android ADB 完美支持中文 详细讲解(一)
- Android ADB 完美支持中文 详细讲解(二)
- adb shell input text 完美支持中文输入
- adb shell input text 完美支持中文输入
- Android adb “push pull”中文支持解决方案
- Android adb “push pull”中文支持解决方案
- Android adb “push pull”中文支持解决方案
- Android架构详细讲解与C/C++开发支持原理
- sourceinsight - 完美支持中文注释
- android adb 全面支持中文,支持输入中文, 同时连接大量手机,解决 forward 不稳定 支持模拟器
- Android广播机制完美讲解
- android ViewTreeObserver详细讲解
- android ViewTreeObserver详细讲解
- android task详细讲解
- android ViewTreeObserver详细讲解
- android ViewTreeObserver详细讲解
- android ViewTreeObserver详细讲解
- struts2 18拦截器详解(二) --- ExceptionInterceptor
- (字符串的处理4.7.14)UVA 10252 Common Permutation(寻找两个字符串中的共同字符&&按字典序输出)
- 15 空间配置器
- UVa 10019 - Funny Encryption Method
- goldengate的HANDLECOLLISIONS参数
- Android ADB 完美支持中文 详细讲解(三)
- 线程安全的servlet
- Eclipse开发Android程序引入第三方jar包的方法
- 图像相似度计算
- 浅谈android的selector背景选择器
- OGG-01668: PROCESS ABENDING:添加DataPump进程时的一个错误
- jstl fmt:formatdate转载
- java反射案例详解
- iOS 打开设备相册