AS 为何报错的原因上面已经说了,这里说解决方法,首先,重复的字符串是肯定需要去掉才能在 AS 中继续编译的,其次是去掉后如何保证不对系统源码的编译造成影响。
如何去掉
使用正则表达式,全局匹配重复的字符串,只留下 product 为 default 的,去掉 tablet,当然,如果你开发的系统是 tablet,那么自然是留下 tablet。
<string name="(.*?)" product="nosdcard" msgid="(.*?)">"(.*?)"</string>
<string name="(.*?)" product="nosdcard">(.*?)</string>
(.*?)<string name="(.*?)" product="tablet" msgid="(.*?)">(.*?)</string>(.*?)
(.*?)<string name="(.*?)" product="tablet">(.*?)</string>(.*?)
(.*?)<string name="(.*?)" product="tablet">\n(.*?)\n(.*?)</string>(.*?)
通过 Edit - Find - Replace in Path... 功能,将上面的每一条都复制过去,通过勾选 Regex,使用正则表达式全局 replace 成空白,可自行调整内容进行 replace,留下你想要的 product。
需要注意的是最后一条的换行符,可增加 \n(.*?) 的个数,匹配多行。
如何不对系统源码造成影响
注意,去掉重复的字符串后,将所有的相关更改都提交到一个 commit,并且记录下 tag,这样子本地的 AS 即可编译通过,而系统源码 pull 下这个 commit 后,通常来说如果你的源码是针对一种设备的,比如手机,那么无需理会这个 commit,因为不会影响你的系统编译,但是如果后续你的源码要使用到其他类型的设备上,比如平板 tablet 上,那么就需要在编译时对这个 commit 进行 revert,不懂这些 git 命令的请自行Google,revert 后的源码不要提交,后续如果需要 pull,可先 stash 后再 pull,pull 完毕后再将 stash pop 出来进行编译。这样就不会影响 AS 端的编译。完美。
这里简单解释下这些相关命令,revert 会对指定的提交执行逆操作,比如你的提交是A变成B,那么 rever t就会把B变成A。stash 命令会存储当前工作区的修改,使工作区的状态变成没有产生修改,在 pull 进行拉取更改合并修改后,stash pop 会将存储的修改重新还原。具体使用请参考 Git 的使用,这里不再展开叙述。