Codename一个在较低分辨率下运行的应用程序(Android)



我正在三星Galaxy Tab a 10.1(2019(上测试我的应用程序(调试版本(。设备分辨率为1200 x 1920。然而,当我使用getDisplayWidth((和getDisplayHeight((时,我得到了900 x 1359(=1440-状态栏(。因此,该应用程序以较低的分辨率运行,实际上图形看起来有点粗糙。但当我做一个屏幕截图时,它的分辨率是1200 x 1920。Galaxy Tab A无法更改屏幕分辨率,我也找不到解决这个问题的方法。

这是一个已知的问题吗?有解决方案吗?

编辑:临时解决方案是更改(已知应用程序的(程序包名称。使用NativeLogsReader.cn1lib我们可以获得

1( 原始包名:

--------- beginning of main
05-17 13:09:35.879 24347 24347 D ViewRootImpl@34e19e6[MainStub]: Relayout returned: 
old=[0,0][1200,1920] new=[0,0][900,1440] result=0x7 surface={true 3890690048} changed=true

2( 更改了包名:

--------- beginning of main
05-17 13:22:46.459 26231 26231 D ViewRootImpl@34e19e6[MainStub]: Relayout returned: 
old=[0,0][1200,1920] new=[0,0][1200,1920] result=0x7 surface={true 3890690048} changed=true

因此,使用原始程序包名称时,分辨率会降低,而更改程序包名称后,分辨率将保持原生状态。我在谷歌上搜索了这个问题,没有发现其他的例子或线索。

编辑2:原始包名称(com.xx.yy(和测试包名称(com.ibm.xx.yy2(的设备控制台输出。

1( 所有输出,按包名称过滤:

a( 原包装名称:

2020-05-18 11:12:48.174 3915-4148/? D/StorageManagerService: getExternalStorageMountMode : final mountMode=1, uid : 10163, packageName : com.xx.yy
2020-05-18 11:12:48.175 3915-4148/? I/ApplicationPolicy: isApplicationExternalStorageWhitelisted:com.xx.yy user:0
2020-05-18 11:12:48.175 3915-4148/? D/ActivityManager: package  com.xx.yy, user - 0 is SDcard whitelisted
2020-05-18 11:12:48.175 3915-4148/? I/ApplicationPolicy: isApplicationExternalStorageBlacklisted:com.xx.yy user:0
2020-05-18 11:12:48.175 3915-4148/? I/ApplicationPolicy: isApplicationExternalStorageBlacklisted:com.xx.yy user:0
2020-05-18 11:12:48.194 3915-3933/? I/ActivityManager: Start proc 13627:com.xx.yy/u0a163 for activelaunch com.xx.yy/.MainStub
2020-05-18 11:12:48.199 13627-13627/? I/com.xx.yy: Late-enabling -Xcheck:jni
2020-05-18 11:12:48.235 13627-13627/? I/com.xx.yy: report jit thread pid = 13632
2020-05-18 11:12:48.238 4834-4985/? I/SAPrinter: sendEvent :{cd=det3packageNamecom.xx.yy, t=ev, en=1001, pn=201, ts=1589793168238}
2020-05-18 11:12:48.249 3915-4194/? I/ActivityManager: START u0 {act=android.intent.action.MAIN typ=null flg=0x10200000 cmp=ComponentInfo{com.xx.yy/com.xx.yy.MainStub}} from uid 10010
2020-05-18 11:12:48.252 3915-4194/? I/ActivityManager: [IOP] sourceDir : /data/app/com.xx.yy-i4NuDIQRBO8c4W1IO7HhTA== in ActivityStacksupervisor
2020-05-18 11:12:48.266 3572-3572/? I/SurfaceFlinger: id=2615 createSurf (3840x3840),2 flag=4, AppWindowToken{e37293b token=Token{b713ca ActivityRecord{cd6e335 u0 com.xx.yy/.MainStub t69}}}#0
2020-05-18 11:12:48.272 3915-4311/? I/ActivityManager: DSS on for com.xx.yy and scale is 0.75

注意"刻度为0.75"。

b( 测试包名称:

...(similar)...
2020-05-18 11:08:43.650 3915-5720/? I/ActivityManager: DSS on for com.xx.yy2 and scale is 1.0

注意"刻度为1.0"。

2( 特定调试应用程序输出:

a( 原包装名称:

2020-05-18 13:31:07.695 21604-21604/? E/Zygote: isWhitelistProcess - Process is Whitelisted
2020-05-18 13:31:07.696 21604-21604/? E/Zygote: accessInfo : 1
2020-05-18 13:31:07.701 21604-21604/? I/com.xx.yy: Late-enabling -Xcheck:jni
2020-05-18 13:31:07.741 21604-21604/? I/com.xx.yy: report jit thread pid = 21609
2020-05-18 13:31:07.835 21604-21604/com.xx.yy W/ActivityThread: Application com.xx.yy can be debugged on port 8100...
2020-05-18 13:31:07.842 21604-21604/com.xx.yy I/com.xx.yy: The ClassLoaderContext is a special shared library.
2020-05-18 13:31:08.252 21604-21604/com.xx.yy W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@b9352ba
2020-05-18 13:31:08.378 21604-21604/com.xx.yy I/DecorView: createDecorCaptionView >> DecorView@4039d47[], isFloating: false, isApplication: true, hasWindowDecorCaption: false, hasWindowControllerCallback: true
2020-05-18 13:31:08.418 21604-21604/com.xx.yy D/OpenGLRenderer: Skia GL Pipeline
2020-05-18 13:31:08.632 21604-21604/com.xx.yy D/EmergencyMode: [EmergencyManager] android createPackageContext successful
2020-05-18 13:31:08.655 21604-21604/com.xx.yy D/InputTransport: Input channel constructed: fd=60
2020-05-18 13:31:08.656 21604-21604/com.xx.yy D/ViewRootImpl@34e19e6[MainStub]: setView = DecorView@4039d47[MainStub] TM=true MM=false
2020-05-18 13:31:08.669 21604-21604/com.xx.yy V/InputMethodManager: Not IME target window, ignoring
2020-05-18 13:31:08.672 21604-21637/com.xx.yy D/App: [EDT] 0:0:0,2 - Codename One revisions: 7dd4e7d08b3442d90959477ee52a5ae8c4361b29
2020-05-18 13:31:08.678 21604-21637/com.xx.yy D/App: [EDT] 0:0:0,9 - package com.xx.yy
2020-05-18 13:31:08.693 21604-21637/com.xx.yy D/App: [EDT] 0:0:0,20 - Native Logs Reader initialized correctly
2020-05-18 13:31:08.703 21604-21604/com.xx.yy D/ViewRootImpl@34e19e6[MainStub]: Relayout returned: old=[0,0][1200,1920] new=[0,0][900,1440] result=0x7 surface={true 3890690048} changed=true

注意"new=[0,0][9001440]"。

b( 测试包名称:

...(similar)...
2020-05-18 16:26:40.564 24283-24283/com.xx.yy2 D/ViewRootImpl@34e19e6[MainStub]: Relayout returned: old=[0,0][1200,1920] new=[0,0][1200,1920] result=0x7 surface={true 3890690048} changed=true

注意"new=[0,0][12001920]"。

编辑3:使用原始包名称的新测试。初始情况:应用程序以降低的分辨率运行900x1440。

Steps:
1. deinstall app
2. switch off wifi/internet
3. install app (from downloads)
4. optional: switch on wifi/internet
5. run app

结果:应用程序具有本机分辨率1200x1920。结论:在安装过程中,使用包名称的在线检查设置了降低的分辨率。

编辑4:CN1设备测试仪应用程序的输出:

Density: DENSITY_HIGH
Platform Name: and
User Agent: Dalvik/2.1.0 (Linux; U; Android 9; SM-T510 Build/PPR1.180610.011)
OS: Android
OS Version: 9
UDID: 01234567890abcde
MSISDN: null
Display Width X Height: 1200X1812
1mm In Pixels: 9.449
Language: en
Locale: US
Currency Symbol: $
Are Mutable Images Fast: false
Can Dial: false
Can Force Orientation: true
Has Camera: true
Badging: false
Desktop: false
Tablet: true
Gaussian Blur Support: true
Get All Contacts Fast: true
Multi Touch: true
PICKER_TYPE_DATE: true
PICKER_TYPE_DATE_AND_TIME: false
PICKER_TYPE_STRINGS: true
PICKER_TYPE_TIME: true
Native Share: true
Native Video Player Controls: true
Notification: true
Open Native Navigation: true
Screen Saver Disable: true
Simulator: false

编辑5:我还查看了使用和不使用互联网连接进行安装的控制台输出。

1( 无互联网连接:

...
2020-05-20 13:51:36.746 28438-28455/? D/GOS:NetworkConnector: getPkgData(), packageName : com.xx.yy
2020-05-20 13:51:36.808 28438-28455/? D/GOS:NetworkConnector: getPkgData(), request: https://service.game-mode.net/gamemode/v3/packages/?type=install&device_name=gta3xlwifi&package_names=com.xx.yy, response: null
2020-05-20 13:51:36.830 28438-28455/? D/GOS:PackageDAO: updateTimeStamp(): com.xx.yy
2020-05-20 13:51:36.874 28438-28455/? D/GOS:SystemEventReactor: addPkgDataFromServer(), A package was added : com.xx.yy as undefined
...

请注意"com.xx.yy未定义"。

2( 具有互联网连接:

...
2020-05-20 13:36:31.944 23382-23415/? D/GOS:NetworkConnector: getPkgData(), packageName : com.xx.yy
2020-05-20 13:36:32.254 23382-23415/? D/GOS:NetworkConnector: doDirectly(), Response, responseCode: 200, URL: https://service.game-mode.net/gamemode/v3/packages/?type=install&device_name=gta3xlwifi&package_names=com.xx.yy, response: {"code":"201001","message":"Success","packages":[{"package_name":"com.xx.yy","category_code":"game","game_genre":"BOARD","device_group":"gta3xl","game_oracle_cache":true,"cache":true}]}
2020-05-20 13:36:32.254 23382-23415/? D/GOS:NetworkConnector: getPkgData(), request: https://service.game-mode.net/gamemode/v3/packages/?type=install&device_name=gta3xlwifi&package_names=com.xx.yy, response: {"code":"201001","message":"Success","packages":[{"package_name":"com.xx.yy","category_code":"game","game_genre":"BOARD","device_group":"gta3xl","game_oracle_cache":true,"cache":true}]}
...
2020-05-20 13:36:32.379 23382-23415/? D/GOS:SystemEventReactor: addPkgDataFromServer(), A package was added : com.xx.yy as game
...

注意"com.xx.yy as game"。

因此有一个请求https://service.game-mode.net包名称作为参数。这让我找到了以下链接:

三星游戏优化降低了显示密度和尺寸

Galaxy Note 5:自动降低密度

https://www.xda-developers.com/samsung-shuts-down-the-game-tuner-service/

总之,有一个在线注册的应用程序(包名称(,在安装过程中会被查询。这可能会导致应用程序的分辨率降低。唯一已知的解决方案,三星游戏调谐器应用程序,已不复存在。

由于注册归三星所有,我问他们是否可以更改我的应用程序的状态。(这是一款CPU使用率很高但图形很少的游戏AI——当然,我仍然想要高分辨率的图形。(

导致此问题的原因是对https://service.game-mode.net(参数:软件包名称(。这可能会导致默认分辨率的更改,例如,如果应用程序被称为"游戏"(我的应用程序是棋盘游戏(。这可以由用户使用游戏性能调整服务(如game Launcher(进行更改。这适用于所有三星手机和大多数三星平板电脑。但事实并非如此,我的平板电脑是三星Galaxy Tab a 10.1 2019(SM-T510(。在联系三星开发者支持后,他们更改了此设备类型的设置,因此现在我的应用程序以本机分辨率运行。

如果设备测试仪正常工作,我猜加载时的分辨率是为了兼容性而伪造的(这是很多设备都会做的事情(,然后会发送一个屏幕大小更改事件来更新。您可以在表单中添加一个屏幕大小事件侦听器来监视大小更改事件,也可以在需要时动态调用getDisplayWidth()

通常,最好的做法是在这里进行防御编程,如果显示宽度与上次使用的显示宽度不同,则代码可以动态地重新创建元素。

相关内容

最新更新