fix(输入法): 优化双端联想排序并消除文字刷新闪烁
这个提交包含在:
1 父节点
bce6f8083b
当前提交
b95e7caae7
31 个文件已更改
+504
-124
没有与搜索条件相匹配的文件
@@ -4,6 +4,7 @@ APP=pathlib.Path(__file__).resolve().parents[1]
|
||||
|
||||
def main():
|
||||
parser=argparse.ArgumentParser(description=__doc__);parser.add_argument('--serial',required=True);parser.add_argument('--output',type=pathlib.Path,required=True)
|
||||
parser.add_argument('--background-regression',action='store_true',help='Run native offscreen component checks without launching an Activity or switching the foreground')
|
||||
args=parser.parse_args();args.output.mkdir(parents=True,exist_ok=True)
|
||||
def adb(*command,binary=False,timeout=30,retries=3):
|
||||
last=None
|
||||
@@ -14,26 +15,30 @@ def main():
|
||||
if command[0]!='install'and'device' not in last.lower()and'closed' not in last.lower():break
|
||||
print('Device connection interrupted; retrying this command.',flush=True);time.sleep(1)
|
||||
raise RuntimeError(last)
|
||||
apk=APP/'app/build/outputs/apk/release/app-release.apk';test=APP/'app/build/outputs/apk/androidTest/release/app-release-androidTest.apk'
|
||||
apk=APP/'app/build/outputs/apk/release/app-release.apk';test=APP/('keyboard/build/outputs/apk/androidTest/debug/keyboard-debug-androidTest.apk'if args.background_regression else'app/build/outputs/apk/androidTest/release/app-release-androidTest.apk')
|
||||
assert apk.is_file()and test.is_file()
|
||||
model=adb('shell','getprop','ro.product.model');sdk=adb('shell','getprop','ro.build.version.sdk')
|
||||
original=args.output/'original-ime.txt'
|
||||
if not original.exists():original.write_text(adb('shell','settings','get','secure','default_input_method')+'\n',encoding='utf-8')
|
||||
host=APP/'host/build/outputs/apk/debug/host-debug.apk'
|
||||
for path in [apk,test,host]:print(adb('install','-r',str(path),timeout=90),flush=True)
|
||||
for path in ([test]if args.background_regression else[apk,test,host]):print(adb('install','-r',str(path),timeout=90),flush=True)
|
||||
before=adb('shell','settings','get','secure','default_input_method')
|
||||
print('Default system IME retained; testing the embedded keyboard only.',flush=True)
|
||||
adb('shell','input','keyevent','224');adb('shell','wm','dismiss-keyguard')
|
||||
if not args.background_regression:adb('shell','input','keyevent','224');adb('shell','wm','dismiss-keyguard')
|
||||
# The instrumentation is bounded short acceptance, not a stress/soak run.
|
||||
command=['adb','-s',args.serial,'shell','am','instrument','-w','-r','com.sydxky.crabinput.test/androidx.test.runner.AndroidJUnitRunner']
|
||||
command=['adb','-s',args.serial,'shell','am','instrument','-w','-r']
|
||||
if args.background_regression:command+=['-e','class','com.sydxky.crabinput.SurfaceRegressionTest']
|
||||
command+=[('com.sydxky.crabinput.keyboard.test'if args.background_regression else'com.sydxky.crabinput.test')+'/androidx.test.runner.AndroidJUnitRunner']
|
||||
result=subprocess.run(command,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,timeout=240)
|
||||
output=result.stdout.decode('utf-8',errors='replace');(args.output/'instrumentation.txt').write_text(output,encoding='utf-8');print(output,flush=True)
|
||||
passed=result.returncode==0 and 'OK (9 tests)'in output and 'FAILURES!!!'not in output
|
||||
report={'model':model,'sdk':sdk,'version':'1.2.2','apk_sha256':hashlib.sha256(apk.read_bytes()).hexdigest(),'instrumentation_tests':9,'embedded_component':True,'system_ime_unchanged':adb('shell','settings','get','secure','default_input_method')==before,'passed':passed}
|
||||
expected=3 if args.background_regression else 9
|
||||
passed=result.returncode==0 and f'OK ({expected} tests)'in output and 'FAILURES!!!'not in output
|
||||
report={'model':model,'sdk':sdk,'version':'1.2.3','release_apk_sha256':hashlib.sha256(apk.read_bytes()).hexdigest(),'instrumentation_tests':expected,'verification_mode':'native_offscreen_component'if args.background_regression else'interactive','interactive_tests_run':not args.background_regression,'component_variant':'debug'if args.background_regression else'release','embedded_component':True,'system_ime_unchanged':adb('shell','settings','get','secure','default_input_method')==before,'passed':passed}
|
||||
(args.output/'device-validation.json').write_text(json.dumps(report,indent=2)+'\n',encoding='utf-8')
|
||||
assert passed and report['system_ime_unchanged'],'See instrumentation.txt; failed/unfinished cases are not accepted'
|
||||
adb('shell','am','start','-n','com.sydxky.crabinput/.MainActivity');time.sleep(.5)
|
||||
(args.output/'home.png').write_bytes(adb('exec-out','screencap','-p',binary=True))
|
||||
if not args.background_regression:
|
||||
adb('shell','am','start','-n','com.sydxky.crabinput/.MainActivity');time.sleep(.5)
|
||||
(args.output/'home.png').write_bytes(adb('exec-out','screencap','-p',binary=True))
|
||||
print(json.dumps(report),flush=True)
|
||||
|
||||
if __name__=='__main__':main()
|
||||
在新工单中引用
屏蔽一个用户