android 变量支持中文吗,Android ADB 完美支持中文 详细讲解(三)

修改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

{

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

全部修改一下。

a4c26d1e5885305701be709a3d33442f.png

file_sync_client.cpp 这个文件也要修改,修改的地方比较多,

最好是拿着代码一遍调试一遍修改。 和文件操作相关的都修改成宽字符版本就可以了。

第四步

针对每个命令去调试就可以修改差不多了,故意使用一些中文的名字来调试。

最后说一下进入 adb shell 时候中文处理

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

转让Android,IOS 手机助手各种技术资料,文档,以及源码,有需要的可以联系我QQ: 2506314894

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值