APM小结
  G4l4hCJqRVjT 2023年11月02日 39 0

启动脚本

应用启动 /etc/profile: echo "cd to applications/apm" cd applications/apm ./svcmgr & ./bigbang ---path /applications/apm/appmgr ---argv -ed off -c /Customer/app.cfg Svcmgr :     Svcmgr 是android中比较重要的一个进程,它是在init进程启动之后启动,从名字上就可以看出来它是用来管理系统中的service。比如:InputMethodService、ActivityManagerService等。在Svcmgr 中有两个比较重要的方法:add_service、check_service。系统的service需要通过add_service把自己的信息注册到ServiceManager中,当需要使用时,通过check_service检查该service是否存在。 它的main函数处理: 打开/dev/binder设备,并在内存中映射128K的空间; 通知Binder设备,把自己变成context_manager; 进入循环,不停的去读Binder设备,看是否有对service的请求,如果有的话,就去调用svcmgr_handler函数回调处理请求。

Bigbang            appmgr 进程监控 appmgr启动参数:   ("-------- MSTAR AppMgr -----------------------------------------------\n");     ("                                                                     \n");     ("    -h                                                               \n");     ("    --help             print this help message and simple intro.     \n");     ("                                                                     \n");     ("    -v                 verbose (level=1)                             \n");     ("    -vv                verbose (level=2)                             \n");     ("    -vvv               verbose (level=3)                             \n");     ("                                                                     \n");     ("    -s                                                               \n");     ("    --slient           no message will be printed.                   \n");     ("                                                                     \n");     ("    -kd [on/off]       turn on/off key dispatch function             \n");未使用     ("    -da [on/off]       launching default app at start up or not      \n");配置cfg中设定SN为default app     ("    -is [on/off]       turn on/off internal statstics/accouting      \n");未使用内部统计     ("    -nl [on/off]       enable/disable now loading logo procedure     \n");     ("    -rl [on/off]       re-launch or not when app abnormal abort/exit \n");     ("    -ed [on/off]       enable dfb init at main()                     \n");     ("                                                                     \n");     ("    -lt n              n seconds for auto. loading logo when         \n");     ("                       application switch.                           \n");     ("                                                                     \n");     //    ("    -l now_loading logo plugin file.                                 \n");     //    ("     default: %s\n", APM_NOWLOAD_PLUGIN_FILE);     ("                                                                     \n");     ("    -k dfb_keymap_file override default dfb keymap file.             \n");     ("     default: %s\n", APM_DFB_KEYMAP_FILE);     ("                                                                     \n");     ("    -c app_def_file    override default app definition file path     \n");     ("     default: %s\n", APM_APP_DEFINITION_FILE);     ("                                                                     \n");     ("---------------------------------------------------------------------\n");

APM配置文件

在编译时是projects\ui\Apps\apm\cfg\mstar.apm.def,在系统运行时是/Customer/app.cfg [System] default = SN  TV应用 mem_limit = 4096  kb应用memory envv1 = country=GBR lang=eng  应用参数,会解析填入appinfo   在project/systeminfo/board.h中会有下述定义 //Default Country #define DEFAULT_COUNTRY             E_GERMANY //Default Language #define DEFAULT_LANGUAGE            E_LANGUAGE_ENGLISH //define auto start App data_dir = /Customer/apps  应用数据读写目录 auto_start_count = 2     应用启动顺序 auto_start_1 = SN auto_start_1_delay = 10    应用启动间隔 auto_start_2 = CommonUI auto_start_2_para = --silent   不输出打印信息 auto_start_2_delay = 3 auto_start_3 = MstarLauncher auto_start_3_para = --silent //auto_start_3 = DIAL //auto_start_3_para = --silent timeout=20                   应用启动默认超时   [CommonUI] path = /applications/CommUI/bin/CommUI         应用路径 exe_type = app                   app/widget   exe_domain = native                linux本地应用 exclusive=0                       1独占应用 0 非独占应用  When launching a new app (target app), if target-app is non-exclusive, the exclusive app will not be destroyed.if target-app is exclusive, the exclusive app will be destroyed..if an exclusive but non-target app exists, call onDestroy() and terminate that app  if target app is exclusive, and there is an alive app which is not target & exclusive; call onLoseResource() else if target app is non-exclusive but use resource, and resource owner app is not target app, call onLoseResource() 需要运行新的应用时,如果新应用是非独占的,独占应用不会被destroy,如果新应用是独占的,当前独占应用destroy,调用onDestroy()完成操作,并且需要释放资源。   argv1= --nowloading=n              判断是否需要立刻加载,应用读取判断 priority= hotkey1=MIX                      需要接收的热键   [SN] pretty_name=Back2TV icon_path=/applications/CommUI/rc/rc/img/Demo_img/App/GRIDMENU_IMG_DEFAULT.png path=/applications/bin/autorun exe_type=app exe_domain=native tmpfs_size=4096            maximal size of temp directory exclusive=0 envv1 = PORTAL_PATH=http://itv.ard.de/ardstart  入口URL下载了一个页面无法打开 argv1= --nowloading=y priority= timeout=0 hotkey1=POWER hotkey2=MUTE hotkey3=VOLUME_UP hotkey4=VOLUME_DOWN hotkey5=AUDIO hotkey6=REVEAL hotkey7=PAGE_UP  

MstarLauncher和启动应用

[MstarLauncher] pretty_name=MstarLauncher icon_path=/applications/CommUI/rc/rc/img/Demo_img/App/GRIDMENU_IMG_QtWebkit.png path=/applications/MWB/MstarLauncher exe_type=app exe_domain=native exclusive=0 argv1 = "-qws -display directfb:layerid=0 (指定显示驱动)-transparent-background (背景透明)-nomouse" //-remote-inspector-port 1234 envv1 = DFB_LAYER=0 WINDOW_STACK=middle MSTAR_DEVICE_INPUT=APM DFB_LAYER WINDOW_STACK Specify which DirectFB layer and WINDOW_STACK to use.   MSTAR_DEVICE_INPUT Specify source of input events.   envv2 = LD_LIBRARY_PATH=/applications/appdata:/applications/MWB/lib:/vendor/lib:/vendor/lib/utopia:/vendor/lib/directfb-1.4-0/inputdrivers/:/config envv3 = QT_QWS_FONTDIR=/applications/MWB/fonts QT_PLUGIN_PATH=/vendor/lib/qt/plugins envv4 = WEB_WIDTH=1280 WEB_HEIGHT=720 WEB_RESOLUTION_WIDTH=1280 WEB_RESOLUTION_HEIGHT=720 envv5 = CERT_CA_BUNDLE_PATH=/applications/MWB/certificates envv6 = QTWEBKIT_PLUGIN_PATH=/applications/MWB/plugins envv7 = CERT_KEY_PATH=/applications/MWB/certificates/key.pem envv8 = CERT_CERT_PATH=/applications/MWB/certificates/cert.pem MSTAR_QT_KEYMAP=/applications/MWB/mstarkeymap.csv envv9 = FORCE_RDATE=1 QWS_NO_SHARE_FONTS=true SW_Version=7.2.12.0.0.1 Full_ModelName=SN_401 ConnectType=wireless ENABLE_DBG_OUT=0 envv10 = PanelWidth=1920 PanelHeight=1080 timeout=0 priority= hotkey1=     [YTTV] pretty_name=YTTV icon_path=/applications/CommUI/rc/rc/img/Demo_img/App/GRIDMENU_IMG_YOUTUBE.png path=/applications/MWB/MstarLauncher exe_type=app exe_domain=native exclusive=0 argv1 = "-qws -display directfb:layerid=0 -transparent-background -nomouse -app YOUTUBE http://www.youtube.com/tv?launch=menu&additionalDataUrl=http%3a%2f%2flocalhost%3a56789%2fdialData%3fapp%3dYouTube" envv1 = DFB_LAYER=0 WINDOW_STACK=middle MSTAR_DEVICE_INPUT=APM envv2 = LD_LIBRARY_PATH=/applications/appdata/:/applications/MWB/lib:/vendor/lib:/vendor/lib/utopia:/vendor/lib/directfb-1.4-0/inputdrivers/:/config:/vendor/lib/qt/plugins/gfxdrivers/:/vendor/lib/gstreamer-0.10 envv3 = QT_QWS_FONTDIR=/applications/MWB/fonts QT_PLUGIN_PATH=/vendor/lib/qt/plugins envv4 = WEB_RESOLUTION_WIDTH=1280 WEB_RESOLUTION_HEIGHT=720 envv5 = CURL_CA_BUNDLE_PATH=/applications/MWB/certificates/cacert.pem envv6 = MSTAR_QT_KEYMAP=/applications/MWB/mstarkeymap.csv envv7 = FORCE_RDATE=1 priority= hotkey1=  

APM应用启动分类

  系统启动:SN、CommonUI、MstarLauncher 后续页面启动: Netflix   Netflix_power Netflix_mix Netflix_dial CinemaNow   CinemaNow_2 CinePlex KnowHowMovies QJY   QJY_BestTV Vudu OPERA_TV_STORE   OPERA_BROWSER Skype   OpenBrowser OWB:WidgetDock   Googlemap_widget    MstarLauncher 启动: Pandora_MWB、AccuWeather_MWB、YTTV、TOONGOGGLES、MEDIAMARKT、CATAL、iPlayerv3、BBCSports、BBCNews、Blinkbox、Facebook_MWB、Twitter_MWB、Picasa_MWB、Flickr_widget、TerraTV_MWB、   南美opera启动应用: OPERA_TVSTORE  OPERA_ASKBALL  OPERA_TVB  OPERA_Viewster OPERA_AccuWeather   OPERA_Webseriados  OPERA_Sony  OPERA_Cinema OPERA_FM        OPERA_Vimeo OPERA_InstaTV OPERA_Dailymotion OPERA_Xtremefilms   OPERA_PRMotor         TV OPERA_CNN   [OPERA_TVSTORE] pretty_name=Opera TV Store icon_path=/applications/CommUI/rc/rc/img/Demo_img/App/OPERA_TVSTORE.png path=/applications/opera_tvstore/mipsel/gcc-4.3-51-glibc-2.8/run-Opera exe_type=app envv1=LD_LIBRARY_PATH=/vendor/lib:/vendor/lib/utopia:/vendor/lib/directfb-1.4-0/inputdrivers:/config envv2 = DFB_LAYER=1 WINDOW_STACK=middle GST_PLUGIN_PATH=/vendor/lib/gstreamer-0.10 argv1=4 argv2 = -a argv3 = Model/MST6328 argv4 = --slave /applications/opera_tvstore/browser/opera-tv-browser-slave.sh //argv5 = -q ShortcutApp argv5 = -q tvstore argv6 = -l https://tvstore.opera.com/redirect/accuweather?action=runapp exe_domain=native timeout=0 tmpfs_size=4096 exclusive=1 priority= hotkey1=   [OPERA_ASKBALL] pretty_name=Opera TV Store icon_path=/applications/CommUI/rc/rc/img/Demo_img/App/OPERA_TVSTORE.png path=/applications/opera_tvstore/mipsel/gcc-4.3-51-glibc-2.8/run-Opera exe_type=app envv1=LD_LIBRARY_PATH=/vendor/lib:/vendor/lib/utopia:/vendor/lib/directfb-1.4-0/inputdrivers:/config envv2 = DFB_LAYER=1 WINDOW_STACK=middle GST_PLUGIN_PATH=/vendor/lib/gstreamer-0.10 argv1=4 argv2 = -a argv3 = Model/MST6328 argv4 = --slave /applications/opera_tvstore/browser/opera-tv-browser-slave.sh argv5 = -q ShortcutApp //argv5 = -q tvstore argv6 = -l https://tvstore.opera.com/redirect/ask-the-ball?action=try exe_domain=native timeout=0 tmpfs_size=4096 exclusive=1 priority= hotkey1=  

APM应用中启动其它应用

接口APM_RequestToRun 参考测试用例:     printf("App: %s launched\n", APP_NAME);  主应用     APM_Join(&appctrl_handler);     sleep(3);     APM_RequestToRun(char *)"test_Loop");  测试应用启动     sleep(1);     printf("[%s] call APM_Leave()\n", APP_NAME); APM_Leave();   在UI中启动MStarLauncher应用:UI调用下面接口发命令让Mstarlauncer来启动应用     Mstarlauncer启动的应用是基于Web based AP, Hbbtv and Ginga,例如youtube、facebook,pandora之类, 启动的接口如下:  int32_t WebAppMgr_SendCommand(EN_WEBAPPMGR_COMMAND_TYPE cmd, const char *args)  

APM应用启动

默认启动SN(TV)、CommonUI、MstarLauncher TV默认加载到前台,通过热键可分别启动CommonUI和MstarLauncher,并切换到前台。 目前在6308来看,只有TV界面能够进入CommonUI和MstarLauncher,CommonUI界面不能进入MstarLauncher,MstarLauncher界面不能进入CommonUI,CommonUI和MstarLauncher退出进入TV界面。CommonUI和MstarLauncher界面通过RequestToRun启动其它应用。

// 本地应用收到HotKey後要做的動作void HotKeyToHome(void) { GetFocusApp(pAppName, size); if (strcmp(pAppName, “HomeUI”) == 0) { ReleaseFocus();  }else if (strcmp(pAppName, “TV”) == 0) { RequestFocus(); }else { // For other native/android app, // terminate that app & let HomeUI be focused                 RequestToExit(pAppNmae); }

callback函数

应用必须注册APM callback函数,APM通过callback函数控制应用状态,注册完成后,应用才能算是纳入APM管理。 OnGetFocus, OnLoseFocus,分别是在应用激活或非激活时使用,同时也影响按键接收,只有Focus应用才能接收按键。   APM_APPCTRL_HANDLER_t appctrl_handler = {     OnGetFocus,     OnLoseFocus,     OnDestroy,     OnGetResource,     OnLoseResource,     OnNotify, }; 参考commonUI和test示例的设计。    OnGetFocus, OnLoseFocus,主要针对应用可切换到后台的操作,应用根据自身需求实现该接口,如CommonUI的OnGetFocus需要初始化CVBS layer和DFB等操作,最后调用 FileBrowserFrame::applet->Show和 menuApp::Summon显示,OnLoseFocus时调用FileBrowserFrame::applet->Hide和menuApp::pApp->Kill()。还有galaxy应用里的OnGetFocus和OnLoseFocus分别是iIpcApi_ActiveAP和iIpcApi_InactiveAP。其它应用internal_osd、nebula等实现OnGetFocus是调用MSrv_LoadingLogo::DisplayLogo。目前大部分应用的OnGetFocus和OnLoseFocus都是空函数。 OnDestroy,是应用自销毁函数接口,主要在测试代码中有体现,比如设置应用退出标志,使应用自己退出循环。 OnGetResource和OnLoseResource的实现可以参考internal_osd:OnGetResource主要是设置显示输出和屏蔽其它应用热键。OnLoseResource设置输出关闭和使能热键。   OnNotify主要让应用处理APMEVENT。

资源管理

应用资源占用申请分类 ///Resource typedef enum {     APM_RESOURCE_NONE        = 0x00000000,     APM_RESOURCE_OVERALL     = 0xFFFFFFFF,     APM_RESOURCE_VIDEO       = 0x00000001,     APM_RESOURCE_AUDIO       = 0x00000002,     APM_RESOURCE_VIDEOAUDIO  = 0x00000004,     APM_RESOURCE_GRAPHIC_APP = 0x00000008,     APM_RESOURCE_GRAPHIC_G3D = 0x00000010, } APM_RESOURCE_e; APM_RequestResource一般在APM_Join后,应用启动前使用,参考internal_osd、galaxy等,如galaxy使用APM_RequestResource(APM_RESOURCE_OVERALL)、 internal_osd使用APM_RequestResource(APM_RESOURCE_VIDEOAUDIO)和    APM_RequestResource(APM_RESOURCE_GRAPHIC_APP)。   APM_RESOURCE一般与图层layer相关,LAYER_VIDEO和VIDEO资源相关,LAYER_APP是应用GUI layer,如Netflix, CinemaNow,Leanback, Chumby,DLNA,Skype等应用使用。CommonUI 、Supernova UI(TV)使用LAYER_MENU,叠加在LAYER_VIDEO上。 ///GUI layer typedef enum {     APM_GUI_LAYER_VIDEO   = 0x1,     APM_GUI_LAYER_APP     = 0x2,     APM_GUI_LAYER_ANDROID = 0x4,     APM_GUI_LAYER_WIDGET  = 0x8,     APM_GUI_LAYER_MENU    = 0x10,     APM_GUI_LAYER_NOTIFY  = 0x20, } APM_GUI_LAYLER_e;   所有资源都只能被当前一个应用使用,当其它应用需要使用该资源时APM_ReleaseResource释放资源,在应用退出运行调用APM_Leave前。 目前主要的实现是在APM service中的RequestToRun通过判断bExclusive值,在应用启动时判断应用资源是RESOURCE_OVERALL或者是RESOURCE_NONE,然后根据需要释放当前运行应用的资源,需要运行的应用获得资源。   exclusive和non-exclusive应用分类 Exclusive=1: Netflix、Netflix_power、Netflix_mix、Netflix_dial、CinemaNow、CinemaNow_2、CinePlex、KnowHowMovies、QJY、QJY_BestTV、Vudu、OPERA_TV_STORE、OPERA_BROWSER、OpenBrowser、CBrowser、Googlemap_widget、BESTV、GamePlayer   MstarLauncher启动的应用:Pandora_MWB、AccuWeather_MWB、Facebook_MWB、Twitter_MWB、Picasa_MWB、Flickr_widget、TerraTV_MWB、     Exclusive=0(non-exclusive): SN、CommonUI、MstarLauncher、MWBLauncherMemoryMonitor (MWBLauncherMemoryMonitor用来做内存监控使用)、Skype、 MstarLauncher启动的应用:YTTV、TOONGOGGLES、MEDIAMARKT、CATAL、iPlayerv3、BBCSports、BBCNews、Blinkbox、WidgetDock、    

按键处理

QT应用从DFB接收按键消息,调用QT KeyPressEvent函数处理按键。 void TVHomePage::keyPressEvent(QKeyEvent *event) {     //if(focusWidget())     for(QVector<QWidget *>::iterator it = bigControlList.begin(); it != bigControlList.end(); ++it)     {         if (*it == focusWidget())         {             qDebug("\n keycode is 0x%x,nFocusedWdgIdx = %d,COUNT = %d\n",event->key(),bigControlList.indexOf(focusWidget()),bigControlList.count());             switch(event->key()) ............ 在需要处理Hotkey的QT应用中建立单独的线程或者定时器方式来接收处理Hotkey。QT应用从APM读取Hotkey,APM接收DFB的按键消息。 从目前的场景来看只有TV应用使用到了Hotkey,但不排除后续其他应用会使用到Hotkey。QT应用中只有当前focused的应用才能接收到按键,为了使各个独立的QT应用都能使用到Hotkey,采用从APM读取按键并判断是否热键处理的方式。  DFBInputEvent evt; if (APM_HasInputEvent() > 0) {           APMInputEvent apmkey;           if ((APM_GetInputNonBlock(&apmkey) > 0))            {                    memcpy(&evt, &(apmkey.data), apmkey.size);  同时为了避免其它应用的热键影响当前应用的使用,APM_RequestToDisableHotkey屏蔽热键,在应用退出时APM_RequestToEnableHotkey使能热键。 APM对按键的接收主要实现是在APM_Join函数中,在应用调用APM_Join时,    _join_key_receiver();和_join_event_receiver()分别使能按键接收和APM event接收,在onDestroy时调用_leave_key_receiver()和_leave_event_receiver屏蔽。  

QT应用使用示例

QT应用主程序

    这里主要指TV、CommonUI和MStarLauncher的实现,其它第三方应用目前大部分是由MStarLauncher运行的,如果如Netflix、DIAL和DLNA等应用需要单独启动,需要封装类似的porting接口,可参考projects\ui\apps\dlna。     如果使用opera的则不使用MStarLauncher启动网络应用,但是run-Opera类似于MStarLauncher。 9.1.1.回调函数 在代码中实现回调函数APM_APPCTRL_HANDLER_t appctrl_handler ,分别实现里面的接口:       OnGetFocus,  应用启动或显示     OnLoseFocus, 应用隐藏     OnDestroy,   应用退出,在两个exclusive应用同时运行时。     OnGetResource,  获取资源     OnLoseResource, 释放资源     OnNotify,       处理APM event 参考按键处理测试代码: 在线程初始化前加入: void QThreadApp::initVariable() {     focus = 0;     RowNumber = 0;          qDebug()<<"<------Testing test_GetInputLoop------>";        APM_Join(&appctrl_handler);            //创建子线程     workthread = new WorkThread();     connect(workthread, SIGNAL(WorkSignal(char *)), this, SLOT(Start(char *)));     workthread->start(); } 在线程退出时: QThreadApp::~QThreadApp() {     delete workthread;        APM_Leave(); }    

按键处理

普通按键处理: void TVHomePage::keyPressEvent(QKeyEvent *event) {             switch(event->key())             { } }   热键线程处理流程:     workthread = new WorkThread(); connect(workthread, SIGNAL(WorkSignal(char *)), this, SLOT(Start(char *)));     void WorkThread::run() {     APMInputEvent ApmInputEvt;        DFBInputEvent pDFBInputEvt;     int size;     int key_id;        char * keystr = NULL;               qDebug()<<"Testing test_GetInputLoop";        APM_Join(&appctrl_handler);            while(1)     {         size = APM_GetInputWait(&ApmInputEvt);         if (size > 0)         {             pDFBInputEvt = (DFBInputEvent)(&(ApmInputEvt.data));             qDebug()<<"<------------------"<<APP_NAME<<"receive key";             qDebug()<<"<--------------------------------pDFBInputEvt->key_symbol="<<pDFBInputEvt->key_symbol;             qDebug()<<"<--------------------------------pDFBInputEvt->key_code="<<pDFBInputEvt->key_code;             if (pDFBInputEvt->type != 1)                 continue ;             keystr = DFB_KeySymbolU32ToName(pDFBInputEvt->key_symbol);             qDebug()<<"<------------------KEY STR = "<<keystr;             key_id = pDFBInputEvt->key_id;             qDebug()<<"<------------------pDFBInputEvt->key_id="<<key_id;                      emit WorkSignal(keystr);               }     }            APM_Leave(); }         热键的定时器方式读取:     timer = new QTimer(this);     QObject::connect(timer, SIGNAL(timeout()), this, SLOT(Start())); timer->start(500);     //设置定时器为0.5s   void QTimerApp::Start() {     qDebug()<<"<------------------PlayerControl::Start";       DFBInputEvent pDFBInputEvt;     int size;     int key_id;     size = APM_GetInputWait(&ApmInputEvt);     if (size > 0)     {         char * keystr = NULL;         pDFBInputEvt = (DFBInputEvent)(&(ApmInputEvt.data));         qDebug()<<"<------------------"<<APP_NAME<<"receive key";         qDebug()<<"<--------------------------------pDFBInputEvt->key_symbol="<<pDFBInputEvt->key_symbol;         qDebug()<<"<--------------------------------pDFBInputEvt->key_code="<<pDFBInputEvt->key_code;           if (pDFBInputEvt->type != 1)             return ;         keystr = DFB_KeySymbolU32ToName(pDFBInputEvt->key_symbol);         qDebug()<<"<------------------KEY STR = "<<keystr;         key_id = pDFBInputEvt->key_id;         qDebug()<<"<------------------pDFBInputEvt->key_id="<<key_id;         if(strcmp(keystr, "0") == 0)         {             this->hide();         }         if(strcmp(keystr, "1")==0 || strcmp(keystr, "2")==0)         {             this->show();         }     } } 热键的屏蔽和使能: unsigned int _disabled_hotkey[] ={MVK_MIX}; APM_RequestToDisableHotkey(_disabled_hotkey, sizeof(_disabled_hotkey)/sizeof(int)) 在应用退出前: APM_RequestToEnableHotkey(_disabled_hotkey, sizeof(_disabled_hotkey)/sizeof(int))   9.1.3.main函数APM调用示例 APM_Join(&appctrl_handler) ;应用运行前 根据需要申请资源和注册或屏蔽热键: APM_RequestResource(APM_RESOURCE_OVERALL); RegisterAllHotKey();或者APM_RequestToDisableHotkey    pApp->Run();应用运行  循环 应用退出后: APM_RequestToEnableHotkey使能屏蔽的热键 APM_Leave();    

APM配置文件

应用在app.cfg文件中增加应用启动信息,详细设置查看前文。 主要项: [test_GetInputLoop] pretty_name=test_GetInputLoop icon_path=/applications/CommUI/rc/rc/img/Demo_img/App/GRIDMENU_IMG_OPENBROWSER.png path=/Customer/usb/sda1/timer_run.sh exe_type=app argv1 = "-qws -display directfb:layerid=0 http://655acfd8beea0026e6c70f8625ed11d0.b15647443e92946b3e4fa5b76890f6c9.com/www/nr_portal.php?lang=en&country=GER" envv1 = DFB_LAYER=0 WINDOW_STACK=middle MSTAR_DEVICE_INPUT=APM envv2 = LD_LIBRARY_PATH=/Customer/usb/sda1/QT/libs:/applications/OpenBrowser/lib:/vendor/lib:/vendor/lib/utopia:/vendor/lib/directfb-1.4-0/inputdrivers/:/config:/vendor/lib/qt/plugins/gfxdrivers/ envv3 = QT_QWS_FONTDIR=/Customer/.owb/conf/font QT_PLUGIN_PATH=/vendor/lib/qt/plugins envv4 = WEB_RESOLUTION_WIDTH=1280 WEB_RESOLUTION_HEIGHT=720 envv5 = QWS_NO_SHARE_FONTS=true envv6 = QTWEBKIT_PLUGIN_PATH=/Customer/usb/sda4/6308/QT/plugins envv7 = QWS_DISPLAY=directfb envv8 = QT_PLUGIN_PATH=/Customer/usb/sda4/6308/QT/plugins exe_domain=native timeout=0 tmpfs_size=4096 exclusive=1 priority= hotkey1=

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

G4l4hCJqRVjT