【java】使用X5Cloud云平台开发Android网络游戏

时间:2019-05-14 04:39:50下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《【java】使用X5Cloud云平台开发Android网络游戏》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《【java】使用X5Cloud云平台开发Android网络游戏》。

第一篇:【java】使用X5Cloud云平台开发Android网络游戏

随着文明时代的进步,信息逐渐迈向云端化,以前花费很多时间开发一套程序,如今轻轻松松就可以完成。即使一个人也可以在很短的时间内,完成一项很大的工程,这完全归功于云计算的出现,使程序员告别了繁琐的的数据管理,专心于前台和逻辑的研发。

在云端上开发,用户只要注册一个云账号,使用云端提供已经优化好的SDK包,就可以立即上手。

云端优化提供了程序员梦寐以求的功能实现,像传输数据的高压缩,以提高数据页面的响应速度。分布式数据库阵列,带来毫无压力的强数据流访问,用户自己也可以采用多个云账号模式,进行数据库的优化部署,安全、简单、高效、快速,已成为云端化的信息时代标签!并且,它还实现了跨平台,web、平板、移动三屏合一,如此开发起来更加高效,接近完美。尤其是在android上面开发网游,更是得心应手!

仅需下载云端 SDK包,就可以完成对云端数据的高效访问,没有任何限制,和web应用开发类似。优势就显得非常明了化了,不会android开发的程序员,想从事android的开发,在使用云端 SDK 包情况下,仅需两到三周就可以进行android程序开发了。(作为笔者自己,仅用了不到两周,就完成了一个云端商品管理的开发。http://www.xiexiebang.com)

第二篇:Qualcomm平台android开发总结

1、高通平台android开发总结.7 1.1 搭建高通平台环境开发环境.7 1.2 搭建高通平台环境开发环境.7 1.2.1 高通android智能平台概述.7

1.2.1.1 什么是L4,REX,BREW,AMSS以及相互之间的关系.7 1.2.2 选择合适的源代码以及工具.8

1.2.2.1 获取经过高通打补丁的android 源代码.8 1.2.2.2 获取高通针对不同处理器的vendor源代码.9 1.2.2.3 获取 modem 源代码.9

1.2.2.3.1 高通 modem 源代码编译前的修正.13 1.2.3 建立 Android 开发环境.14 1.2.4 建立 modem 开发环境.15 1.2.4.1 补充.16

1.2.4.1.1 获取 licenses 16

1.2.4.1.2 Flex 简单使用指南.16 1.2.4.1.3 启动 license 服务器.18

1.2.4.1.4 license 没有办法从服务器获取的几种情况.18 1.2.4.1.5 破解 rvds 的license 19 1.2.5 在高通开发板上烧录文件系统.19

1.3 高通平台,android和 modem 编译流程分析.21 1.3.1 android代码编译流程分析.21 1.3.1.1 编译工具检测.22 1.3.1.1.1 22

1.3.1.2 appsboot.mbn 生成过程解析.22

1.3.1.3 boot.img 生成过程解析,怎样手动生成 boog.img 28 1.3.1.4 编译过程存在的问题.32

1.3.1.4.1 prelinkmap 的时候 base 0xaff00000 out of range 32 1.3.1.4.2 LOCAL_SDK_VERSION 使应用程序不能访问hide的api 32 1.3.1.4.3 armv5te-vfp 导致一些游戏运行不了.32 1.3.2 分布式编译 android 代码.33 1.3.3 modem 代码编译流程分析.33

1.3.3.1 单独编译某个模块(如:qcsbl oemsbl).34 1.3.3.2 $(TARGETDIR)/exist 规则解析.36 1.3.3.3 setup规则解析.36

1.3.3.3.1 corebsp_create_incpaths 36 1.3.3.3.2 create_incpaths 36 1.3.3.3.3 amsssetup 36

1.3.3.3.4 amsslinkaddress 36 1.3.3.3.5 firmware 38 1.3.3.4 deps规则解析.38

1.3.3.5 corebsp_build规则解析.38 1.3.3.5.1 corebsp_build_action 38 1.3.3.5.1.1 corebsp_scons 规则.39 1.3.3.5.1.1.1 corebsp_scons_start 39 2.3.3.5.1.1.1 corebsp_scons_action 39

1.3.3.5.1.1.2.1 命令 pboot_gen_elf image_header pboot_add_hash 解析.40

1.3.3.5.1.1.2.2 env.BinBuilder 过程解析.41 1.3.3.5.1.1.2.3 env.MbnBuilder 过程解析.41

1.3.3.5.1.1.2.4 env.MbnDummyBuilder 过程解析.42 1.3.3.5.1.1.2.5 fsbl.mbn 生成过程解析.43 1.3.3.5.1.1.2.6 dbl.mbn 生成过程解析.43

1.3.3.5.1.1.2.7 AMSS_AABBQOLYM.mbn 生成过程解析.43 1.3.3.5.1.1.2.8 adsp.mbn 生成过程解析.43 1.3.3.5.1.1.2.9 osbl.mbn 生成过程解析.44

1.3.3.5.1.1.2.10 enandprg_AABBQOLYM.mbn 生成过程解析.44 1.3.3.5.1.1.2.11 nandprg_AABBQOLYM.mbn 生成过程解析.45 1.3.3.5.1.1.2.12 emmcbld.mbn 生成过程解析.45 3.3.3.5.1.1.1 corebsp_scons_done 46 1.3.3.5.1.2 corebsp 46

1.3.3.5.2 corebsp_create_incpaths 46 1.3.3.5.3 corebsp_setup 46 1.3.3.6 libs 46

1.3.3.7 copybar规则解析.47 1.3.3.8 exe规则解析.47

1.3.3.8.1 CORELIBS_AABBQOLYM.mbn生成过程解析.47 1.3.3.8.2 amss.mbn 生成过程解析.47 1.3.3.9 bldprod规则解析.48

1.3.3.10 create_mem_feat_html规则解析.48 1.3.3.10.1 50

1.3.3.11 partition规则解析.50

1.3.3.11.1 eMCC 启动和 NAND 启动的分区格式是不一样的,如果是 eMCC 启动,多了编译选项:.50

1.4 高通平台 7630 启动流程分析.52 1.4.1 启动流程概述.52 1.4.2 pbl 流程.52 1.4.3 dbl 流程.52 1.4.4 osbl 流程.54

1.4.4.1 osbl 装载 appsbl 过程分析.56

1.4.5 appsbl 流程(源代码在 android中).56

1.4.5.1 aboot_init 过程分析(需要侧重关心的部分).58 1.4.5.1.1 fastboot 模式分析.61

1.4.5.1.1.1 什么是 fastboot 模式.61

1.4.5.1.1.2 fastboot 模式与 recovery 模式的区别.61 1.4.5.1.1.3 怎样进入 fastboot 模式.62

1.4.5.1.1.4 android 系统手机刷机过程分析(补充知识)62 1.4.5.1.2 appsbl 引导 android 系统.63

1.4.5.1.2.1 Android 系统启动过程中存在的问题.67 1.4.5.1.1.1.1 linker 问题导致系统无法启动.67 1.4.6 AMSS 流程.69

1.5 android 系统重启关机流程分析.82 1.5.1 c语言中调用 reboot 函数.82 1.5.2 通过 adb 让系统重启.82

1.5.3 fastboot 模式下系统重启.83 1.5.4 系统关机.84

1.5.5 内核中的系统调用 reboot 85 1.6 软件调用流程分析.89 1.6.1 设置sim卡状态.89 1.6.2 设置背光.90 1.6.3 获取电池信息.90

1.7 python scons 语法学习.94 1.8 python 语法学习.94 1.8.1 Python中文全攻略.94

1.8.2 推荐一款Python编辑器.94

1.8.3 使用 pyExcelerator 读 Execl 文件.94 1.8.4 xlrd 解析 xls 文件.95 1.8.5 xlrd 生成 xls 文件.95

1.9 Python 语言之 scons 工具流程分析.95 1.9.1 Program 方法.100 1.9.2 Library 方法.100

2、高通常用工具使用.101 2.1 QPST 101 2.2 QXDM 101 2.3 QCAT 101

3、工程模式.101

4、Android 系统更新升级总结.104 4.1 刷机基本知识.104

4.1.1 各品牌代表手机刷机模式进入方法.104 4.1.1.1 HTC G1 104

4.1.1.2 三星 Galaxy i7500 104 4.1.1.3 Google Nexus One 105 4.1.2 fastboot 模式.105

4.1.2.1 fastboot 模式概述.105

4.1.2.2 PC端fastboot 命令分析.106 4.1.2.2.1 命令选项 –w –s-p –c 106 4.1.2.3 手机端fastboot 命令分析.107 4.1.2.3.1 boot 107 4.1.2.3.2 erase 107 4.1.2.3.3 flash 107 4.1.2.3.4 continue 107 4.1.2.3.5 reboot 107

4.1.2.3.6 reboot-bootloader 107 4.1.2.3.7 getvar 107 4.1.2.3.8 download 108 4.1.2.3.9 update 108

4.1.2.3.9.1 system/core/fastboot/fastboot.c:294: 108 4.1.2.3.9.2 fprintf(stderr, “archive does not contain '%s'n”, name);108 4.1.2.4 fastboot 模式流程分析.108 4.1.3 recovery 模式.108

4.1.3.1 recovery 模式概述.108 4.1.3.2 软件升级包.109

4.1.3.3 recovery v1跟recovery v2的区别.109 4.1.3.4 软件升级脚本语法解析.109 4.1.3.4.1.1 mount 110 4.1.3.4.1.2 getprop 111

4.1.3.4.1.3 file_getprop 111 4.1.3.4.1.4 assert 111 4.1.3.4.1.5 format 111

4.1.3.4.1.6 apply_patch_check 111 4.1.3.4.1.7 apply_patch_space 111 4.1.3.4.1.8 apply_patch 111

4.1.3.4.1.9 package_extract_file 112 4.1.3.4.1.10 ui_print 112

4.1.3.4.1.11 META-INF/com/google/android/update-script 脚本分析.1124.1.3.4.2 Recovery 模式中 install_package 函数解析.117 4.1.3.5 Recovery 流程分析.118 4.1.3.5.1 恢复出厂设置.118 4.1.3.5.2 系统更新流程.119

4.1.3.5.3 通过sd卡实现刷机.121 4.1.3.6 系统升级包案例分析.122 4.1.4 工程模式(HBoot)模式.122 4.1.4.1 HBOOT降级方法.122

4.2 如何制作升级包 update.zip 123 4.2.1 手动制作升级包.123 4.2.2 自动制作升级包.123 4.3 Android 签名机制.125

4.4 android 文件系统权限概述.125 4.4.1 获取手机root权限.127 4.4.2 adb默认权限分析.128

4.4.3 adb root命令切换到 root 权限.129 4.4.4 挂载系统分区为读写(remount)130

4.4.5 通过修改 boot.img 获取 Nexus One 权限.132 4.5 系统应用移植.132

4.5.1 Android 2.2在线升级的移植.132

4.5.2 解决donut Gtalk、Market登录不了的问题.133 4.5.3 apk反编译问题总结.133

4.5.4 系统重启.133

5、高通linux内核驱动开发.133 5.1 添加串口调试.133 5.2 Sensor 传感器.133

5.3 USB 枚举 USB Composition 134 5.4 USB 枚举 USB Composition 136

6、从 android 源代码制作 sdk 136 6.1 linux sdk 137 6.2 windows sdk 137

7、程序安装与调试.138

8、android 框架流程分析.138 8.1 屏幕显示相关.138 8.1.1 屏幕分辨率.138 8.1.2 屏幕模式.139

8.2 Android 开机充电.141 8.3 Android 开机动画.141 8.3.1 内核开机画面.141 8.3.2 文件系统开机画面.141

8.3.2.1 开机显示的 ANDROID 文字.141 8.3.2.2 ANDROID 发光动画.142

8.3.2.3 initlogo.rle 文件分析.143

8.3.2.4 bootanimation.zip 文件分析.143 8.3.3 三星I9000 开机动画.144 8.4 JNI调用流程.145

8.5 Android 开机铃声.145 8.6 GPS 导航.145

8.6.1 GPS导航原理.145 8.6.2 GPS导航软件.145

9、高通modem框架流程分析.146 9.1.1 添加自定义rpc调用.146

9.1.1.1 从AP端获取modem的系统分区信息.146 9.1.2 添加自定义 AT命令.146

10、linux 应用.146

10.1 嵌入式Linux通过帧缓存截图包括Scheduling(调度), File system(文件系统), Networking(网络), Device driver(设备驱动程序), Memory management(存储管理), Paging(存储页面管理)-都在内核中完成.一直到现在广泛应用的操作系统,如UNIX,Linux,和Windows还大都是monolithic kernel操作系统.但随着操作系统变得越来越复杂(现代操作系统的内核有一两百万行C程序是很常见的事情),把所有这些功能都放在内核中使设计难度迅 速增加.微内核是一个与Monolithic Kernel相反的设计理念.它的目的是使内核缩到最小,把所有可能的功能模块移出内核.理想情况下,内核中仅留下Address Space Support(地址空间支持),IPC(Inter-Process Communication,进程间通讯),和Scheduling(调度),其他功能模块做为用户进程运行。

REX 是在 L4 之上封装的服务,是一个抢占式,多任务的RTOS,所有的任务都以task的形式存在,REX提供包括任务创建,同步,互斥,计时器,中断控制等功能的 API,这里的task实际上就是我们的线程,每个 task对应着一个线程。REX维护一个task list(双向链表),始终运行高优先级的task。products里面所有的服务包括3g协议栈等都是以task的形式跑在rex之上的。而Brew的话是运行的环境,跟Java 有点儿类似,相当于是一个虚拟机。AMSS――高级的移动用户软件(Advanced Mobile Subscriber Software)技术,是一种新的软件架构,是对原来软件架构 DMSS 的升级。AMSS源代码实际上是QC BREW(Binary Runtime Environment For Wireless)平台的的底层部分,去掉了为应用程序提供接口的AEE(application execution environment)部分,高通在Dual Proc芯片上的其他平台基本上都是采用的这样的架构。

参考文档:

微内核操作系统及L4概述

http://wenku.baidu.com/view/90929762caaedd3383c4d311.html MSM平台上的AMSS http://blog.csdn.net/yili_xie/archive/2010/01/04/5129469.aspx

1.2.2 选择合适的源代码以及工具 要编译出可供烧写使用的镜像文件需要三部分代码: 1)获取经过高通打补丁的 android 源代码 2)获取高通针对不同处理器的 vendor 源代码 3)获取 modem 源代码

1.2.2.1 获取经过高通打补丁的android 源代码 网址:

https://www.xiexiebang.com1312 Chipset(such as QSC6270):MSM7227-1 RF chipset(such as RGR6240):RTR6285 PMIC chipset(such as PM7540):PM7540 WCMDA Supported Bands(900,1900,2100„.if support WCDMA):2100 CMDA Supported Bands(450,850,1900,2100„ if support CDMA):not suport OS(Brew,BMP,Android,WM,ThinUI(no UI)„):android froyo OS version(Android Donuts„): android froyo

1.2.2.3.1 高通 modem 源代码编译前的修正

从高通获取的源代码直接编译会存在一些问题,以下为可能的问题以及解决方法:

1)为相应的脚本加上编译选项

vim./AMSS/products/7x30/build/ms/xxxxxx.cmd 加上: BUILD_UNIX=yes

2)如果编译过程出现.pl 文件没有执行权限而退出,那么为工程下面所有的 pl 文件加上可执行属性,命令:

find./-name “*.pl” |xargs chmod 755

3)无法找到需要的 pl 脚本解析器

vim./AMSS/products/7x30/tools/build/depgen.pl 修改

#!/pkg/perl/5.6.1/bin/perl-w 为

#!/usr/bin/perl-w

4)如果出现错误:

“AMSS/products/7x30/core/bsp/build/data/incpathsaaabqmlym.py”, line 14 IndentationError: expected an indented block 修改文件:./AMSS/products/7x30/core/bsp/build/scripts/genpaths.pl 内容:

#if($line =~ /^# makefile(from/)为:

if($line =~ /^# makefile /)原因分析:

genpaths.pl 会对编译过程的中间信息 :...line=# makefile(from'incpaths.min',line 363)line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc...等信息进行解析,由于我们使用的是中文系统,所以以上内容变为: line=# makefile(从'incpaths.min',行 363)line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc 所以导致:

#if($line =~ /^# makefile(from/)判断条件为为 false 无法正确生成 incpathsaaabqmlym.py,python 在解析该文件的时候认为存在语法错误。

在 modem 代码 M7630AABBQMAZM2020(HY11-N2280-2.zip)中开始使用 genincpaths.py 产生

./AMSS/products/7x30/core/bsp/build/data/incpathsaaabqoazm.py 文件,所以修改文件 amend-source-code-qualcomm-modem.sh 在脚本中需要加入以下内容: incpathsxxx_py=$PRODUCT_DIR/core/bsp/build/scripts/genincpaths.py if test-f $incpathsxxx_py;then PERL=`which /usr/bin/perl` sed-i “s/(from//g” $incpathsxxx_py fi./AMSS/products/7x30/multimedia/audio/drivers/Adie/AdieCodecDb/src/DALAdieCodecDb.c #DalAdieCodecDbInternal.h 改为: #include “DALAdieCodecDbInternal.h”

5)如果出现 make: execvp:../../../../platform/cs/bin/cifc: Permission denied 错误,执行以下命令:

chmod-R 755 AMSS/platform/cs/bin/*

1.2.3 建立 Android 开发环境(略)

curl http://android.git.kernel.org/repo >~/bin/repo chmod a+x ~/bin/repo export PATH=~/bin:$PATH 1)安装基本软件

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev

2)安装 sun-java5-jdk ubuntu 下通过命令: sudo apt-get install sun-java5-jdk 将会安装下面的包 sun-java5-bin sun-java5-demo sun-java5-jdk sun-java5-jre sun-java5-plugin 如果ubuntu 发布版本中没有 sun-java5-jdk 那么 sudo vim /etc/apt/source.list #for sun-java5-jdk deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse sudo apt-get update sudo apt-get sun-java5-jdk 或者,如果 ubuntu 版中不支持 apt-get,那么用手动安装: sudo mount-t nfs 172.20.127.15:/home/shared /mnt sudo dpkg-i /mnt/tools/debs/java-1.5.0-sun/sun-java5-*

3)配置usb cd /etc/udev/rules.d/ sudo vi 50-android.rules # adb single interface device SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18d1”, SYSFS{idProduct}==“d00d”, MODE=“0664”, GROUP=“plugdev” # adb composite interface device SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18d1”, SYSFS{idProduct}==“deed”, MODE=“0664”, GROUP=“plugdev” # Sooner low-level bootloader BUS==“usb”, SYSFS{idVendor}==“0bb4”, SYSFS{idProduct}==“0a51”, MODE=“0664”,GROUP=“plugdev” sudo /etc/init.d/udev restart

1.2.4 建立 modem 开发环境

与android 源代码不同,modem 编译工具使用的是 RVDS ,实际上只用到其中的 RVCT 编译器,高通不提供该工具,我们必须从arm公司获取相应的授权,RVDS 是 ADS 的升级版本,从 ADS 1.2 开始到 RVDS 3.1 我们公司都有其授权,按照高通的要求我们目前必须使用 RVDS 2.2 并且使用他的 349 patch。RVDS 2.2 安装以及使用步骤如下:

1).RVDS 2.2 共享在 172.20.127.15:/home/shared/ 目录 sudo mount-t nfs 172.20.127.15:/home/shared/ /mnt cd /mnt/qualcommon/RVDS-2.2/ linux下rvds2.2的安装程序为:

./rvds2.2_linux-pentium/setuplinux.bin 执行以上命令,按照默认步骤安装,安装路径为:~/ARM 注意事项:

安装过程如果出现错误:

..................java.lang.UnsatisfiedLinkError: /tmp/ismp001/6073753.tmp: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory 从网上下载 libstdc++-libc6.2-2.so.3 拷贝到 /usr/lib 目录 ,或者从下面地址获取:

http://172.20.127.15/repositories/DocsAndTools/Tools/Qualcomm/RVDS-2.2-patch/patch/libstdc++-libc6.2-2.so.3 工具的安装通过脚本进行了简化,具体过程请参考文档: 80-N0216-2_A_M7630AABBQMAZM1170.pdf 80-VR881-7_B_M7630AABBQMLZA1200.pdf 80-VR192-1_C_AMSS_Linux_Software_Users_Guide.pdf 80-VR192-1_D_AMSS_Linux_Software_Users_Guide.pdf

2)安装高通指定的 593 patch cd /mnt/qualcommon/RVDS2.2/下执行命令:./setup-patch-rvct2.2-bin593-lib349.sh

目前版本只支持 32 位的系统 1.2.4.1 补充

vim./AMSS/products/7x30/core/bsp/build/scripts/defaults.py 定义了工作线程

#num_jobs = num_cpu * 2 modified by mhf num_jobs = 2 if num_jobs < 4: num_jobs = 2 if num_jobs > 8: num_jobs = 8 env.SetOption('num_jobs', num_jobs)――――――― 获取 RVDS 官方网站下载评估版本

https://silver.arm.com/browse http://www.xiexiebang.com/wiki/QAEP#Branch_Releases https://www.xiexiebang.com/wiki/QLBEP 下载 M7630AABBQMLZA1150 分支:

February 1, 2010 M7630AABBQMLZA1150 msm7630 eclair M7630AABBQMLZA1150.xml 命令如下:

mkdir-pv ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201 cd ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201 repo init-u git://codeaurora.org/platform/manifest.git-b eclair-m M7630AABBQMLZA1150.xml nohup repo sync 代码下的 vendor/qcom-proprietary 来自包 HY11-VR881-5.zip 以上两部分代码已经下载并且合并,共享在:

http://172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150---------------编译 eclair 代码

svn co http://172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150 cd eclair-M7630AABBQMLZA1150 cd eclair-M7630AABBQMLZA1150$../setenv.sh../make-image.sh ======= modem代码从高通网站:https://support.cdmatech.com/login/ 上获取 我们目前使用的是: 共享在:

http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220-------编译 modem 代码

svn co http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220 cd modem-M7630AABBQMAZM1220../setenv-qualcomm.sh../make ======== 编译结果分别如下:------------其中 adsp.mbn,amss.mbn,dbl.mbn,osbl.mbn,partition.mbn 位于以下目录:./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/adsp.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/amss.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/dbl.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/osbl.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/partition.mbn------------appsboot.mbn,boot.img,system.img,userdata.img 位于以下目录:./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/appsboot.mbn./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/boot.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img.ext3./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img.ext3------------eMMC 启动使用的是 ext3 文件系统,需要使用镜像 system.img.ext3 userdata.img.ext3 补充说明:

partition.mbn 文件的原始数据来自配置文件:

./AMSS/products/7x30/tools/jsdcc/partition_load_pt/partition.xml

1.3 高通平台,android和 modem 编译流程分析 android 代码编译流程分析 modem 代码编译流程分析 1.3.1 android代码编译流程分析

1.从服务器下载 android 源码到当前目录

http://smartphone/repositories/TD1014/branch/froyo_almond-M76XXTSNCJNLYA6050-drivers/ svn co http://172.20.127.15/repositories/TD1014/trunk/froyo_almond-M76XXTSNCJNLYA6050/ cd froyo_almond-M76XXTSNCJNLYA6050/../setenv.sh 设置环境变量 Setting Environment...通常情况下 generic 用于编译模拟器版本 Options are: 1.generic 2.msm7627_surf 3.msm7627_ffa 4.tiny-system ====从以上列表中选择==== Which would you like? [1]

烧录的镜像文件appsboothd.mbn appsboot.mbn boot.img system.img userdata.img persist.img 来自 android 源码 appsboot.mbn 的主要功能是装载 linux 内核,通过 linux 的引导来完成 android 系统的加载,appsboot.mbn 被烧写在相应的分区,它的加载由 osbl.mbn 来完成,osbl.mbn 程序来自 modem。

7x30 7x27 系列 appsboot 不一样,7x30 的 appsboot.mbn 是 7x27 appsboothd.mbn appsboot.mbn 两个文件的合并

1)appsboot.mbn 生成过程解析

2)boot.img 生成过程解析,怎样手动生成 boog.img

1.3.1.1 编译工具检测

make out/target/product/msm7630_surf/appsboot.mbn 1.3.1.1.1

1.3.1.2 appsboot.mbn 生成过程解析

make out/target/product/msm7630_surf/appsboot.mbn make out/target/product/msm7630_surf/nandwrite make out/target/product/msm7630_surf/emmc_appsboot.mbn 分别执行:

make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_EMMC_OBJ msm7630_surf EMMC_BOOT=1 生成 nandwrite =============== #build nandwrite as a part of Android Build TARGET_NANDWRITE := $(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk NANDWRITE_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/nandwrite

nandwrite_clean: $(hide)rm-f $(TARGET_NANDWRITE)$(hide)rm-rf $(NANDWRITE_OUT)

$(NANDWRITE_OUT): mkdir-p $(NANDWRITE_OUT)

$(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)@echo $(TARGET_PRODUCT)_nandwrite $(MAKE)-C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(NANDWRITE_OUT)$(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1 ================

vim./bootable/bootloader/lk/makefile:98: TARGET := msm7630_surf #./bootable/bootloader/lk/project/msm7630_surf.mk PLATFORM := msm7x30 #./bootable/bootloader/lk/target/msm7630_surf/rules.mk msm7x30 msm7630_surf.mk msm7630_surf_nandwrite ============================= include project/$(PROJECT).mk include target/$(TARGET)/rules.mk include target/$(TARGET)/tools/makefile include platform/$(PLATFORM)/rules.mk include arch/$(ARCH)/rules.mk include platform/rules.mk include target/rules.mk include kernel/rules.mk include dev/rules.mk include app/rules.mk...include make/module.mk...include make/build.mk ======================== vim bootable/bootloader/lk/make/module.mk INCMODULES := $(MODULES)$(info including $(INCMODULES))include $(addsuffix /rules.mk,$(INCMODULES))展开为:./bootable/bootloader/lk/app/nandwrite/rules.mk./bootable/bootloader/lk/dev/fbcon/rules.mk./bootable/bootloader/lk/dev/keys/rules.mk./bootable/bootloader/lk/lib/debug/rules.mk./bootable/bootloader/lk/lib/heap/rules.mk./bootable/bootloader/lk/lib/libc/rules.mk./bootable/bootloader/lk/lib/ptable/rules.mk ======================== bootable/bootloader/lk/make/build.mk:29: include arch/$(ARCH)/compile.mk

./bootable/bootloader/lk/project/msm7630_surf_nandwrite.mk 中有: MODULES += app/nandwrite./bootable/bootloader/lk/platform/msm7x30/rules.mk中有: MODULES += dev/fbcon./bootable/bootloader/lk/kernel/rules.mk 中有: MODULES += lib/libc lib/debug lib/heap./bootable/bootloader/lk/target/msm7630_surf/rules.mk 中有: MODULES += dev/keys lib/ptable 所以:

MODULES= app/nandwrite dev/fbcon dev/keys lib/debug lib/heap lib/libc lib/ptable 因为

ifeq($(BUILD_NANDWRITE), 1)APPSBOOTHDR_FILES := else out/host/linux-x86/bin/acp-fpt out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk out/target/product/msm7630_surf/nandwrite

25780 184 34000 59964 ea3c../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk arm-eabi-objcopy-O binary../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.bin generating listing:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.lst generating listing:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.debug.lst generating symbols:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.sym generating size map:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.size make[2]:正在离开目录

/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk make[1]:正在离开目录

/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk target Prebuilt:(out/target/product/msm7630_surf/nandwrite)

make-C bootable/bootloader/lk BOOTLOADER_OUT=./out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 make[2]: 正在进入目录

`/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk` msm7630_surf_nandwrite make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 ==》生成 mkheader 工具

gcc target/msm7630_surf/tools/mkheader.c-o target/msm7630_surf/tools/mkheader

$(BUILDDIR)/system-onesegment.ld: $(LOCAL_DIR)/system-onesegment.ld @echo generating $@ @$(MKDIR)$(NOECHO)sed “s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/” < $< > $@

generating../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/system-onesegment.ld compiling arch/arm/crt0.S compiling arch/arm/crt0.S。。compiling lib/ptable/ptable.c compiling lib/ptable/ptable.c

vim bootable/bootloader/lk/platform/msm7x30/rules.mk-----LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld include platform/msm_shared/rules.mk-----

./build/core/product_config.mk:177:TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)./build/core/envsetup.mk:152:OUT_DIR := $(TOPDIR)out./build/core/envsetup.mk:159:TARGET_OUT_ROOT_release := $(OUT_DIR)/target./build/core/envsetup.mk:161:TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))./build/core/envsetup.mk:178: TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product./build/core/envsetup.mk:184:PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)build/core/envsetup.mk:200:TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj bootable/bootloader/lk/AndroidBoot.mk:4:BOOTLOADER_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_OBJ bootable/bootloader/lk/makefile:32:BUILDDIR := $(BOOTLOADER_OUT)/build-$(PROJECT)bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk 所以:

TARGET_PRODUCT_OUT_ROOT=out/target/product/ PRODUCT_OUT=out/target/product/msm7630_surf/ TARGET_OUT_INTERMEDIATES=out/target/product/msm7630_surf/obj/ BOOTLOADER_OUT=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/ 所以:

BUILDDIR=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf 所以:

OUTELF=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk

make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf

bootable/bootloader/lk/makefile OUTELF := $(BUILDDIR)/lk./bootable/bootloader/lk/make/build.mk $(OUTELF): $(ALLOBJS)$(LINKER_SCRIPT)@echo linking $@ $(NOECHO)$(LD)$(LDFLAGS)-T $(LINKER_SCRIPT)$(ALLOBJS)$(LIBGCC)-o $@

vim./bootable/bootloader/lk/AndroidBoot.mk TARGET_NANDWRITE := $(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk $(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)@echo $(TARGET_PRODUCT)_nandwrite $(MAKE)-C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(NANDWRITE_OUT)$(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1

BOOTLOADER_EMMC_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_EMMC_OBJ

vim./bootable/bootloader/lk/make/build.mk $(OUTELF): $(ALLOBJS)$(LINKER_SCRIPT)@echo linking $@ $(NOECHO)$(LD)$(LDFLAGS)-T $(LINKER_SCRIPT)$(ALLOBJS)$(LIBGCC)-o $@

bootable/bootloader/lk/makefile:33:OUTBIN := $(BUILDDIR)/lk.bin bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk

./lk/platform/msm7x30/rules.mk:23:LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld

==》链接 lk linking../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk linking../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk generating image:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.bin generating image:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin text data bss dec hex filename 29592 7388 42720 79700 13754../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk text data bss dec hex filename 25780 184 34000 59964 ea3c../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk

==》以 binary 格式,把文件

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk 输出到:

out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin arm-eabi-objcopy-O binary out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin ==》

生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.lst 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.debug.lst 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.sym 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.size make[1]:正在离开目录 /opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk ==》

make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=arm-eabi-msm7630-perf_defconfig make[1]: 正在进入目录

/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/kernel generating symbols:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.sym generating size map:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.size

mkheader 从 lk.bin 生成 appsboothd.mbn 语法: mkheader 然后把 appsboothd.mbn 和 lk.bin 合并为文件 appsboot.mbn,删除 appsboothd.mbn 文件 appsboothd.mbn 大小 40K./bootable/bootloader/lk/target/msm7630_surf/tools/mkheader out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin out/target/product/msm7630_surf/appsboothd.mbn 合并 out/target/product/msm7630_surf/appsboothd.mbn out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin 为:

out/target/product/msm7630_surf/appsboot.mbn cat out/target/product/msm7630_surf/appsboothd.mbn out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin > out/target/product/msm7630_surf/appsboot.mbn 删除:out/target/product/msm7630_surf/appsboothd.mbn ==== 1.3.1.3 boot.img 生成过程解析,怎样手动生成 boog.img boot.img 包括两个部分: kernel 和 ramdisk,通过命令: make out/target/product/msm7630_surf/boot.img showcommands 会自动生成 kernel 和 ramdisk,然后把两者合并制作成烧写的镜像文件:boot.img kernel 为

out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage 或者 out/target/product/$TARGET_PRODUCT/kernel , kernel 是 zImage 的拷贝

编译内核之前必须获取一个默认的配置文件.config ,此配置文件可以生成,或者来自默认配置,高通中 msm7630_surf 的

默认配置文件名为: msm7630-perf_defconfig 在文件: vendor/qcom/msm7630_surf/AndroidBoard.mk:45 中通过: KERNEL_DEFCONFIG := msm7630-perf_defconfig 进行了指定。我们可以通过命令:

make-j3 ARCH=arm CROSS_COMPILE=arm-eabi-kernel showcommands 或者通过如下命令一步步完成:

1.获取默认的内核配置并生成.config 的命令如下: make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=arm-eabi-msm7630-perf_defconfig-C kernel 告诉 make 进入 kernel 工作目录,到其下面寻找 makefile 文件

O 内核编译的中间文件以及编译结果等都存储在该目录下,此做法的好处是不会在kernel源代码目录下生成垃圾文件

ARCH=arm 告诉系统到./kernel/arch/$ARCH/configs/ 目录下找文件 msm7630-perf_defconfig,生成的.config 保存在:

out/target/product/msm7630_surf/obj/KERNEL_OBJ/.config 2.手动编译内核

make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ/ 3.如果需要配置内核,使用下面的命令 make kernelconfig 他首先会进入 menuconfig 界面,用户配置完成以后,会把修改后的配置文件$(KERNEL_OUT)/.config 更新为默认的配置文件

cp out/target/product/msm7627_ffa/obj/KERNEL_OBJ/.config kernel/arch/arm/configs/msm7627-perf_defconfig kernel/arch/arm/configs/$(KERNEL_DEFCONFIG)

4.手动生成 ramdisk 执行命令

make out/target/product/msm7630_surf/ramdisk.img showcommands 会用到命令:

out/host/linux-x86/bin/mkbootfs out/target/product/msm7630_surf/root | out/host/linux-x86/bin/minigzip > out/target/product/msm7630_surf/ramdisk.img 5.手动生成 boot.img 需要使用命令 mkbootimg ,语法如下: mkbootimg--kernel 内核--ramdisk ramdisk镜像--cmdline 命令行--base 基地址--pagesize 大小--output 输出的boot.img ========== KERNEL=out/target/product/$TARGET_PRODUCT/kernel KERNEL=out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage RAMDISK=out/target/product/$TARGET_PRODUCT/ramdisk.img CMDLINE=“console=ttyDCC0 androidboot.hardware=qcom” BASE=0x00200000 PAGESIZE=4096 OUTPUT=out/target/product/$TARGET_PRODUCT/boot.img out/host/linux-x86/bin/mkbootimg--kernel $KERNEL--ramdisk $RAMDISK--cmdline “$CMDLINE”--base $BASE--pagesize $PAGESIZE--output $OUTPUT =========================================

编译 bootloader(appsboot.mbn),nandwrite 生成过程解析./vendor/qcom/msm7630_surf/AndroidBoard.mk:25: include bootable/bootloader/lk/AndroidBoot.mk =================== 因为有:

bootable/bootloader/lk/AndroidBoot.mk:3: TARGET_BOOTLOADER := $(PRODUCT_OUT)/appsboot.mbn INSTALLED_BOOTLOADER_TARGET := $(PRODUCT_OUT)/bootloader file := $(INSTALLED_BOOTLOADER_TARGET)

第三篇:金蝶云K3 Cloud业务预警业务开发总结

业务预警业务开发总结

最近研究了下业务预警的业务开发,我们有两点需求目前平台还支持不了,1、能本月预警下个月到期的数据;

2、预警结果可以显示明细、也可以显示汇总,甚至希望能显示时间段内的数据

本文档只是个人总结,还有很多不完善的地方希望和大家沟通,相互学习。这里以应收单的业务预警为例 1.BOSIDE中新建预警对象

平台没有提供模板,不过供应链做过,我们直接复制供应链的预警对象就好 预警对象中有5个参数

1、数据源:需要预警的数据来源,可以是单据、基础资料、报表,我这里选择的是应收单

2、预警方案解析插件:

预警方案建立并启动后,后台服务根据预警周期条件,自动执行预警方案,在此过程中,通过预警服务插件进行灵活干预和控制;可以重写类Kingdee.BOS.Core.Warn.PlugIn.AbstractWarnServicePlugIn来实现干预;

2.1 解析消息变量之前事件

在此事件中,可以自定义需要保存到预警消息的关键数据。一般用于报表预警。以下是示例:

///

/// 解析预警消息之前

/// 用途:主要用于报表预警,唯一确定一条报表数据所需要的关键数据是不一定,所有允许自定义

///

///

void BeforeParseWarnMessage(BeforeParseWarnMessageEventArgs e)

{

//添加预警数据关键字段,如以下示例(添加字段名称为FName的关键数据,将保存到预警消息中,以便后续处理使用)

e.KeyValueFieldNames.Add(“FName”);

base.BeforeParseWarnMessage(e);

}

2.2.解析预警条件之后事件

主要用于附加一些额外的过滤条件,适合一些硬编码的条件。以下是示例:

///

/// 触发预警条件解析之后的事件

/// 用途:主要用于添加额外的一些过滤条件

///

///

void AfterWarnConditionParse(AfterWarnConditionParseArgs e)

{

//将客户=‘海格科技’的过滤掉

string filter = “ FCUSTOMERNAME ='海格科技' ”;

if(string.IsNullOrWhiteSpace(e.Filter))

{

e.Filter = filter;

}

else

{

e.Filter = “ AND ” + filter;

}

base.AfterWarnConditionParse(e);

} 2.3.预警执行事件

主要用于修改预警执行结果集合,不建议重写此事件,以下是示例:

///

/// 执行预警解析

/// 用途:主要用于修改执行后的数据集合,不建议重写

///

void ExcuteWarnParse(ExcuteWarnParseEventArgs e)

{

base.ExcuteWarnParse(e);

//将第一个数据中,客户名称改为 海格科技

//数据源是否为报表

if(this.WarnHelper.IsDataSourceReport)

{

e.WarnMessage.WarnObjectSysReportData.Rows[0][“FName”]=“海格科技”;

}

else

{

e.WarnMessage.WarnObjectDynamicObjects[0][“FName”] = “海格科技”;

}

}

2.4.消息解析之后事件

主要用于修改格式化后的预警消息,或者进一步使用自定义变量格式化预警消息

///

/// 解析预警消息之后

/// 用途:主要用于修改格式化后的预警消息,或者进一步使用自定义变量格式化预警消息

///

///

void AfterParseWarnMessage(AfterParseWarnMessageEventArgs e)

{

base.AfterParseWarnMessage(e);

//将自定义变量{FCUSTOMERNAME.Custom} 格式化为 海格科技

for(int i = 0;i < e.WarnMessage.MessageEntityList.Count;i++)

{

MessageEntity item = e.WarnMessage.MessageEntityList[i].MessageEntity as MessageEntity;

if(item!= null)

{

item.Content = item.Content.Replace(“{FCUSTOMERNAME.Custom}”, “海格科技”);

}

}

}

2.5.消息发送之前事件

对发送消息进一步精确控制,以下是示例:

///

/// 发送预警消息之前

/// 针对消息发送的精确控制

///

///

void BeforeSendWarnMessage(BeforeSendWarnMessageEventArgs e)

{

base.BeforeSendWarnMessage(e);

//当消息发送条数大于100时,取消发送

if(e.WarnMessage.MessageEntityList.Count > 100)

{

e.Cancel = true;

}

}

3、客户端插件重写指导说明

在消息中心,或者首页的预警消息功能下面,可以看到预警消息列表。此列表支持预警消息的查看和处理工作,通过预警方案的消息客户端插件重写,可以自定义处理预警消息和查看消息。

同样可以把自己的插件注册进来

重写类:Kingdee.BOS.Core.Warn.PlugIn.AbstractWarnMessagePlugIn 3.1.查看消息

弹出指定的查看界面,如果不重写,则弹出统一的消息查看界面,以下是示例:

///

/// 显示消息

///

public override void ShowWarnMessage(ShowWarnMessageEventArgs e)

{

//根据传过来的关键数据,进行查看

if(e.MsgDataKeyValueList!= null && e.MsgDataKeyValueList.Count()> 0)

{

// DoShow 查看逻辑

}

//标识从插件中查看,这样就不会显示公用的查看界面了

e.IsShowByPlugIn = true;

base.ShowWarnMessage(e);

} 3.2.处理消息

插件根据传递过来的关键数据,进行处理,以下是示例:

///

/// 处理消息

///

public override void ProcessWarnMessage(ProcessWarnMessageEventArgs e)

{

if(e.MsgDataKeyValueList!= null && e.MsgDataKeyValueList.Count()> 0)

{

string message = string.Empty;

message = DoProcess(e.MsgDataKeyValueList);//自定义处理逻辑

//插件中显示了提示消息,公共的提示消息就不显示了

e.Result.IsShowMessage = false;

//标识已被插件处理

e.IsProcessByPlugin = true;

this.ParentView.ShowMessage(message);

}

base.ProcessWarnMessage(e);

}

4、预警条件窗体:

第一个是平台的模板,我们也可以继承这个模板自定义我们自己需要的预警条件,预警条件是一个单据;

5、预警方案插件重写指导说明

预警方案维护界面中,对消息的配置支持变量,而变量是根据对应预警对象数据源的元数据构成的。如果开发者需要精简一些无用的变量,则可以通过重写预警方案插件来实现。

重写类:Kingdee.BOS.Core.Warn.PlugIn.AbstractWarnSolutionEditPlugIn 5.1

设置预警条件之前事件

更改预警消息变量来源,适用于精简一些无用的字段变量;

注意,需与下面的设置预警变量之前事件配套使用,否则会出错; 以下是示例:

///

/// 预警条件界面,在设置预警条件字段之前

///

public override void BeforeSetFilterFields(BeforeSetFilterFieldsEventArgs e)

{

//将字段名为FName的字段移除预警条件字段集合 for(int i = e.FilterFields.Count1;i >= 0;i--)

{

WarnMessageVeriable veriable = e.Veriablelist[i];

if(veriable.FiledName.ToUpperInvariant()== “FName”)

{

e.Veriablelist.RemoveAt(i);

}

}

base.BeforeSetVeriableList(e);

} 预警对象建立好后,我们需要用administrator进入我们的系统,然后设置预警方案

预警方案的新增界面,填好编号和名称,选择预警级别,然后选择自己刚刚在BOS里设置的预警对象,选择预警对象好会默认把BOS里配置的预警条件窗体携带到这里的预警条件下,同时会加载消息设置的东西

然后设置预警周期

设置好保存就可以了,最后设置你的消息提示;

明细表体和明细正文就是我们要设置的明细消息提示、用{}框起来需要提示的字段,这里的字段都是你预警对象数据源里的字段,保存这个预警方案,预警方案就算设置好了,然后启动这个预警方案,就会自动执行,当然你也可以手动执行验证; 执行后到预警执行情况列表里查看就行,同时也会发消息到对应的接收人

第四篇:基于安卓平台的JAVA开发培训

基于安卓平台的JAVA开发培训

Android(安卓)系统是手机或一些平板电脑等终端的操作系统,Android系统在不久的将来即将应用在平板电脑,微波炉,电冰箱等等电器上,汇众教育安卓培训专家表示在全世界,包括中国,移动互联网开发的需求不断加大,移动开发人员,如手机java开发、苹果、安卓系统的开发人员的招聘供大于求,许多具备抓实开发基础和实战经验的人才供不应求。

企业所需的安卓工程师从事的是在安卓平台上用JAVA语言进行各种应用软件的开发,包括通话程序,短信程序等。做个简单的比较,JAVA与安卓的关系和C与linux的关系一样,一个是开发语言,一个是操作系统。因此,汇众教育的安卓工程师培养事实上是基于安卓平台的JAVA开发培训。所以有JAVA基础的童鞋们,你们已经走在了时代的前面,在安卓风暴的大潮中,你们是这个时代前进的动力。汇众教育为有JAVA基础的人员,提供免费的一周岗前实训,让JAVA完美的融入到安卓系统的平台上,对于符合要求的人员,汇众免费提供推荐到国家IT龙头企业就业的机会。

——北大资源研修学院

第五篇:网络云平台使用总结

网络云平台使用总结

一切学习都是为了实践,为了教育好我们新世纪的接班人。于是,在网络云平台使用过程中,我每天都用网络云平台学到的知识来改进我的教育教学,在实践中也确实体验到了成功的喜悦。我时常对照专家们的指导、引领,反思自己平时的课堂教学。

首先是观念的转变。通过网络云平台使用,我才意识到我原先对课程改革的认识并不是很到位,总觉得改不改没什么大不了的。但现在我认识到,课程改革的目的是把教学生如何获得知识转变为教学生如何获得技能,就如古人说的“授人以鱼不如授人以渔”,作为一名教师,我认为这个观念的形成是很重要的。有了这个观念的引导,在 网络云平台使用中,我在教学中遇到问题和挫折时,总是积极主动地想办法去探索解决,而不是躲避。叶圣陶先生说过:教是为了最终达到不需要教。为了达成这个目标,我们在教学上就不光是简单的传授知识,更要注重教学生掌握方法,不能只停留在让学生“学到什么”,要教学生“学会学习”,学生掌握了方法,终身受用,可以自己获取知识,除了学习,还要注重启迪学生的智慧,给学生充分的空间时间,发挥出他们的想象力和创造力。

“用教材教,还是教教材?”在这次培训中我听到几位老师都提到这样一句话。教材是教学过程中的载体,但不是唯一的载体,网络云平台是一个凭借,课堂上教师可以借助网络云平台使用对学生情感的激发、或者是开发学生的思维和想象能力。我在网络云平台使用中取得了意想不到的惊喜。

其次是对课堂教学行为的重新认识与思考。课堂是教师教学生命力的所在地,也是学生智慧的发源地之一。在网络云平台使用中,我做到了以下三点:

1、及时反思自己的教学。我以前的课堂,大多都是教师讲,学生听,老师很少审视自己的教学是否引起了学生的兴趣,也不够关注学生的参与度是否与自己有关。当学生出现与课堂教学不一致的行为时,只是一味抱怨学生,很少反思自己的教学行为是否适应了学生的心理特点,是否激发了学生的求知欲。通过这次培训,在返岗实习中我每节课后都及时反思自己的教学,不断改进教学,以增加课堂教学的魅力,达到及时调控学生的情绪,引导学生积极参与课堂教学的目的,使学生获得更好的发展。

2、留给学生思考的空间和时间。学生获取知识的结果,远远比不上他获取结果的过程重要。让学生在学习上有所发现,有所体验,重要的前提是给予他在学习和研究知识的过程中主动思考和积极探索的时间与空间,这样,他的体验才是幸福而自信的,可以通过“小组合作学习”、“让学生亲历探究过程”等方式进行。

3、学会欣赏学生。我认为这是我在网络云平台使用中做得最好的一点。我在教学中充分树立以学生为本的现代教育观念,给每个学生提供思考、创造、表现及获得成功体验的机会。要做到这一点,我首先学会欣赏每一位学生,发现每一位学生的闪光点,并及时给予鼓励、表扬。学生在我的关注中,慢慢喜欢上了我,也喜欢上了我的课,产生了融洽和谐的师生情感,孩子们在课堂上的表现也非常出色,学习的积极性非常高,超过了我以往的任何课堂。

最后,积极实践,不断提升完善。

1、通过网络云平台使用,我越来越清醒地认识到一定要有终身学习的观点。当今社会、科技飞速发展,只有不断学习,方能与时俱进,以全新的眼光观察和指导自己的教学工作,时代对教师提出了非常高的要求,教师要学习的东西越来越多元化,多学科的知识都要涉及,无论是哪方面的知识都要懂一点,方能胜任新时代的教学。

2、把学到的观念方法落实在教育教学工作中。帮助学生确定适当的学习目标,指导学生形成良好的学习习惯,掌握学习策略和发展能力,创设丰富的教学情境,激发学生的学习动机和学习兴趣,充分调动学生的积极性,为学生提供各种便利,为学生服务,建立一个民主、宽容的课堂气氛,与学生一起分享他们的情感体验和成功喜悦,能够承认过失和错误。

3、向同行学习,不断提升自己。网络云平台使用,接触到了许多优秀的教师同行,他们不但有着扎实的教学功底,更有着锐意进取的钻研精神,他们不怕苦不怕难,与他们探讨、交流,不仅使自己在业务上有所得,更在思想上时刻提醒自己,化紧迫感和危机感为动力。社会不断发展,竞争日益激烈,只有自己不松懈,坚持学习教育理论,同时在思想品德上不断提升自己,使自己既有过硬的业务水平,更有教师应有的道德情操,才能适应新时代的教学。作为语文教师,自身的语文教学能力是事关教学成败的重要因素,因此,我们要丰厚自身的文化底蕴,让自己不再浅薄;我们要拓宽自身的知识视野,让自己不再闭塞;我们要陶冶自身的道德情感,让自己不再简单粗暴。

我们更要坚持网络云平台使用,在网络云平台使用中不断成长,努力寻找最利于自身发展的道路,形成自身鲜明的教学个性。只有不断学习,不断充实自己的知识,不断更新自己的教育观念,不断否定自己,才能不断进步,不断提升。通过网络云平台使用,我发现需要学习与改进的地方还有很多。在今后的日子里,我将继续从网络云平台中,听专家讲座,聆听名师课堂,学习同伴长处,不断学习理论知识,用理论指导教学实践,研究探索教育教学规律,把科研和教学结合起来,做一个专家型、学者型的教师,使自己具有初中物理教学知识方面的前瞻性。

网络云平台使用带给我的收获是无限的,我将铭记一生,享用一生!

下载【java】使用X5Cloud云平台开发Android网络游戏word格式文档
下载【java】使用X5Cloud云平台开发Android网络游戏.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐