亿通手机P2P301 项目软件总结
P2及P301项目软件总结
一、 项目回顾
1、 版本总结
P2到目前为止一共发布14个送测版本,A11,A12,A13已用于正式生产。P2由于三大件存在二供问题,还需要出A14版本来解决,以实现最终放量量产。
P301到目前为止一共发布11个送测版本,在开发前期和中期,两项目版本发布同步,因此版本号基本一致。
主要是在MTK6732新平台上开发,版本成熟度较低,两项目大同小异,仅主要器件的不同,应用软件没有差异。这2个项目采用共分支开发,应用在同一分支,驱动也在同一分支,使用宏,在差异部分做区分,省去大量的代码合并和同步的工作,节省了工作量,实现了快速开发。但当同时开发项目多时,也会有些干扰,开发人员一时难适应,经过一段时间磨合以后,逐渐适应。当某个项目开发即将结束,就可以通过拉TAG的方式,引出,但需要重新创建编译环境,需要一定的硬盘资源,需要考虑。
2、 功能/技术总结
平台:MT6732、KK2.MP13.V1.16、Android 4.4.4。
本项目是该平台上的首次开发,定制了大量的三方应用,比如
软件商店 ,浏览器,天气等功能三方定制。
因为同是Android 4.4.4,应用代码主要从P5项目上移植而来。
二、 流程改进
1. 这2个项目采用共分支开发,应用在同一分支,驱动也在同一分支,使用宏,在差异部分做区分,省去大量的代码合并和同步的工作,节省了工作量,实现了快速开发。但当同时开发项目多时,也会有些干扰,开发人员一时难适应,经过一段时间磨合以后,逐渐适应。当某个项目开发即将结束,就可以通过拉TAG的方式,引出,但需要重新创建编译环境,需要一定的硬盘资源,需要考虑。同平台同时项目较多是,争夺主分支的使用权,会互相有干扰问题。
2. 驱动分支,即CTA分支,即驱动纯净版本跟CTA 版本二合一,这样可节省资源,另外项目初期的试产版本,跟CTA使用同一版本,也可节省资源。实践可行。
三、 疑难总结
1. 生产线发现,部分LCD 最低亮度不亮问题。
部分机器最低亮度不亮屏,是当时测试要求调节最低亮度,P2 framework层修改alps/frameworks/base/core/res/res/values/config.xml最低亮度值由6改成3 ,是在帝京和合力泰两块屏上都有验证的,部分机器不亮屏是由于生产和调试使用的背光ic不是同一颗,出问题的ic是没有经过调试和试产验证的。
确认结果是P2最低亮度由3调整至6,暂停在P2上的使用,i7使用在P2上使用有问题的背光IC芯片,将最低亮度调整至7,与李辉经理确认背光最低亮度的占空比不低于2%即可。另外有工厂提机两台50%以上亮度调节不上去,通过重新焊接IC的使能脚(第4脚)可以恢复正常调节背光。测量ledpwm输出引脚的电压为1.8v到ic的使能脚电压却为1.5v,尝试断开ap端的电阻,此压降现象消失。后续I7会断开Ap端的电阻。这个现象与最低亮度问题没有关系。
2. LCD底部黑条纹问题
这个问题解决的过程比较曲折,开始怀疑设置分辨率的寄存器没有正常写入,不过通过读取写入寄存器的值可以发现是正确的。后来IC原厂通过抓取波形也发现没有问题,包括修改mipi时序以及相关的写入速度等等各种办法都尝试了,还是不行,最后是台湾那边加了一个寄存器,这个寄存器是测试模式下的一个使能寄存器,可以确保初始化里面的寄存器都可以正常写入并且生效。
相关代码alps\mediatek\custom\common\kernel\lcm\otm8018b_dsi_vdo\otm8018b_dsi_vdo.c
加入:
staticstructLCM_setting_tablelcm_initialization_setting[] = {
…
{0x00, 1 , {0x80}}, //added by fengshangdong, very important
{0xF6, 1 , {0x01}},这个也只能针对这个otm8018b
…
}
3. LCD唤不醒黑屏问题
由于我们的机器都开启了cabc功能,而且平台端控制背光IC的那路电路在物理上又没有断开,导致从LCM端的信号出来连接平台端的那路有一部分分压,从而导致背光IC点不亮,所以会引起唤不醒这个现象。解决办法就是将平台端控制背光IC的那路信号断开。
4. LCD恢复出厂设置之后屏幕闪屏,黑色条纹问题
更新了LCD驱动之后没有编进recovery.img,因为这个包里面还是以前的LCD驱动,如果只编lk 跟kernel恢复出厂的时候有可能会出现这个问题,因为recovery.img中保存的还是以前的LCD驱动参数。
5. CTP兼容导致烧写失败问题
系统启动后先判断ic类型,用int g_ic_version全局变量。
在tpd_local_init() 里判断g_ic_version的结果。如果是该器件,
i2c_add_driver(&tpd_i2c_driver)会成功。如果不成功则错误退出。
如果是ft6336--帝晶ctp, 在 ft6336_p2/ft6336_ts.c/ tpd_local_init(void) 里,系统会运行到g_ic_version = 0x6336;
如果不是ft6336--帝晶ctp, 系统在 if(i2c_add_driver(&tpd_i2c_driver)!=0)
会出错退出。
staticinttpd_local_init(void)
{
TPD_DMESG("FocaltechFT6336 I2C Touchscreen Driver (Built %s @ %s)\n", __DATE__, __TIME__);
if(i2c_add_driver(&tpd_i2c_driver)!=0)
{
TPD_DMESG("ft6336unable to add i2c driver.\n");
return -1;
}
if(tpd_load_status == 0)
{
TPD_DMESG("ft6336 add errortouch panel driver.\n");
i2c_del_driver(&tpd_i2c_driver);
return -1;
}
g_ic_version = 0x6336;
strcpy(g_ctp_ic_name,tpd_i2c_driver.driver.name);
wake_lock_init(&ctp_fwup_lock,WAKE_LOCK_SUSPEND, "ctp_fwup_lock");
。。。
。。。
}
如果是合力泰ctp,在msg2138a_p2/msg2138a_driver.c/tpd_local_init(void)里面,系统会运行到g_ic_version = 0x2138a;这一步,
如果不是合力泰ctp,系统在 if(i2c_add_driver(&tpd_i2c_driver)!=0)
就会出错退出。
staticinttpd_local_init(void)
{
TPD_DMESG("Mstar msg2138aI2C Touchscreen Driver (Built %s @ %s)\n", __DATE__, __TIME__);
if(i2c_add_driver(&tpd_i2c_driver)!=0)
{
TPD_DMESG("msg2138aunable to add i2c driver.\n");
printk("han_msg2133 unable to add i2c driver.\n");
return -1;
}
if(tpd_load_status == 0)
{
TPD_DMESG("msg2138a adderror touch panel driver.\n");
i2c_del_driver(&tpd_i2c_driver);
return -1;
}
g_ic_version = 0x2138a;
strcpy(g_ctp_ic_name,tpd_i2c_driver.driver.name);
wake_lock_init(&ctp_fwup_lock,WAKE_LOCK_SUSPEND, "ctp_fwup_lock");
。。。
。。。
}
6. camera录像前4S噪音严重问题
原因分析:P2的camera录像前4S噪音是,由于连接主板和小板的FPC上,mic线和喇叭线处于平行状态,且距离比较近;在喇叭的PA打开时,喇叭线上的小信号会耦合到mic线上从而导致了杂音;在录像的时候滴的一声会持续PA打开状态4S钟,从而导致了前4S的噪音很大,而4S之后噪音就会消失,或者使用耳机来进行录音也不会有噪音问题。
解决方法:
1、FPC从硬件上重新走线,杜绝这样的干扰问题;
2、在硬件无法改善情况下,去掉camera录像时候的滴的一声;
3、微信聊天这样的应用场景也会遇到同样的问题,为了错开喇叭和mic同时工作,减小PA关闭的时间:
需要修改下面的部分:
alps\frameworks\av\services\audioflinger\AudioFlinger.h
//modified the mic noise, decrease the speaker PA closing time,etonguotao 2014-11-27
Static constnsecs_tkDefaultStandbyTimeInNsecs= seconds(0.3); //3S, 0.3S
将3S改为0.3S或者更低一些。
7. 按power键亮屏速度慢问题
原因及解决方法:
各驱动的resume函数里面的延时,还有充电驱动里面的线程的延时需要重新查看,和原始的代码进行比较;除了一些必要的延时,其他的延时都要去掉,还有一些经常打的log也要去掉,加快按power键亮屏的速度。
如下代码:
alps\mediatek\custom\common\kernel\lcm\hx8379c_dsi_vdo\hx8379c_dsi_vdo.c
staticstructLCM_setting_tablelcm_sleep_out_setting[] = {
// Sleep Out
{0x11, 0, {0x00}},
{REGFLAG_DELAY, 120, {}}, //150
// Display ON
{0x29, 0, {0x00}},
{REGFLAG_DELAY, 10, {}},
{REGFLAG_END_OF_TABLE, 0x00, {}}
};
alps\mediatek\platform\mt6752\kernel\drivers\power\pmic_chr_type_det.c
static void hw_bc11_init(void)
{
/*[eton begin]:Modify by jorgenat 2014-11-11
*[reason]:经测试,在此无需延时300ms,也会造成唤醒速度变慢。
*/
//msleep(300);
/*[eton end]*/
Charger_Detect_Init();
//RG_bc11_BIAS_EN=1
mt6325_upmu_set_rg_bc11_bias_en(0x1);
//RG_bc11_VSRC_EN[1:0]=00
mt6325_upmu_set_rg_bc11_vsrc_en(0x0);
//RG_bc11_VREF_VTH = [1:0]=00
mt6325_upmu_set_rg_bc11_vref_vth(0x0);
……
}
alps\mediatek\custom\common\kernel\touchpanel\ft6336_p2\ft6336_ts.c
static int tpd_resume(structi2c_client *client)
{
intretval = TPD_OK;
char data;
TPD_DEBUG("TPD wake up\n");
#ifdef FTS_GESTURE
chargesture_close= 0;
TPD_DMESG("tpd_resumegesture_switch= %d \r\n", gesture_switch);
printk("tpd_resume()/11\n");
if (gesture_switch== 1)
{
gesture_switch= 0;
printk("%s,setgesture_switchto 0, =%d\n",__func__, gesture_switch);
i2c_smbus_write_i2c_block_data(i2c_client,0xd0, 1, &gesture_close);
printk("tpd_resume()/22\n");
}
#endif
#ifdefTPD_CLOSE_POWER_IN_SLEEP
hwPowerOn(TPD_POWER_SOURCE,VOL_3300,"TP");
#else
#ifdef MT6573
mt_set_gpio_mode(GPIO_CTP_EN_PIN,GPIO_CTP_EN_PIN_M_GPIO);
mt_set_gpio_dir(GPIO_CTP_EN_PIN,GPIO_DIR_OUT);
mt_set_gpio_out(GPIO_CTP_EN_PIN,GPIO_OUT_ONE);
#endif
mt_set_gpio_mode(GPIO_CTP_RST_PIN,GPIO_CTP_RST_PIN_M_GPIO);
mt_set_gpio_dir(GPIO_CTP_RST_PIN,GPIO_DIR_OUT);
mt_set_gpio_out(GPIO_CTP_RST_PIN,GPIO_OUT_ZERO);
//msleep(20);
mdelay(10);
mt_set_gpio_mode(GPIO_CTP_RST_PIN,GPIO_CTP_RST_PIN_M_GPIO);
mt_set_gpio_dir(GPIO_CTP_RST_PIN,GPIO_DIR_OUT);
mt_set_gpio_out(GPIO_CTP_RST_PIN,GPIO_OUT_ONE);
msleep(310); //是否可以考虑减小?
#endif
mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM);
if((i2c_smbus_read_i2c_block_data(i2c_client,0x00, 1, &data))< 0)
{
TPD_DMESG("resumeI2C transfer error, line: %d\n", __LINE__);
}
tpd_up(0,0,0);
input_sync(tpd->dev);
printk("tpd_resume()/33\n");
TPD_DMESG("TPDwake up done\n");
gesture_switch =0;
printk("%s,setgesture_switchto 1, =%d\n",__func__, gesture_switch);
returnretval;
}
8. sdcard热插拔导致系统重启问题
原因分析:
Sdcard的中断脚接上了3.3V的电压,原本是1.8V的IO口,导致了中断脚电源域电压偏高不稳定,导致不可预知的问题,比如GPU传输失败等;
解决方法:
去掉Sdcard的中断脚连接的电阻,从硬件上断开,如果只是修改codegen.dws文件还是会存在死机重启问题。
9. 80%电量拔电池重开机电量显示不足问题
问题原因及解决方法:
当待机电流很大,比如200mA时,需要在系统唤醒的时battery的resume函数里去重新检测电量,然后用这个电量再进行电量计算,代码如蓝色部分:
重新计算电量,才不会导致80%电量200mA待机电流8小时以上,然后拔电池重新开机电量确实3%的低电的情况。
g_spm_timer = NORMAL_WAKEUP_PERIOD; // 90 min
alps\mediatek\kernel\drivers\power\battery_meter_p2.c
staticintbattery_meter_resume(structplatform_device *dev)
{
#if defined(CONFIG_POWER_EXT)
#elifdefined(SOC_BY_SW_FG) || defined(SOC_BY_HW_FG)
#if defined(SOC_BY_SW_FG)
kal_int32 hw_ocv_after_sleep;
#endif
structtimespecxts, tom,rtc_time_after_sleep;
#ifdef MTK_POWER_EXT_DETECT
if(KAL_TRUE ==bat_is_ext_power())
return 0;
#endif
get_xtime_and_monotonic_and_sleep_offset(&xts,&tom, &rtc_time_after_sleep);
_g_bat_sleep_total_time += rtc_time_after_sleep.tv_sec- g_rtc_time_before_sleep.tv_sec;
battery_xlog_printk(BAT_LOG_CRTI,"[battery_meter_resume] sleep time = %d, g_spm_timer = %d\n",_g_bat_sleep_total_time, g_spm_timer);
#if defined(SOC_BY_HW_FG)
#ifdef MTK_ENABLE_AGING_ALGORITHM
if(bat_is_charger_exist() == KAL_FALSE)
{
battery_aging_check();
}
#endif
#endif
if(_g_bat_sleep_total_time<g_spm_timer) {
// etonguotao 2014-11-03
// this will keep battery levelno change after sleep long and resume
// return 0;
}
bat_spm_timeout = true;
#if defined(SOC_BY_SW_FG)
battery_meter_ctrl(BATTERY_METER_CMD_GET_HW_OCV,&hw_ocv_after_sleep);
if(_g_bat_sleep_total_time>3600) //1hr
{
/*[eton begin]: Modify by Jorgen at2014-7-10
[reason]:Fixed the problem that thecapacity will keep a long time at one level
*/
if(hw_ocv_after_sleep !=g_hw_ocv_before_sleep)
{
gFG_DOD0 =fgauge_read_d_by_v(hw_ocv_after_sleep);
oam_d0 = gFG_DOD0; //etonguotao 2014-11-03
oam_v_ocv_2 =oam_v_ocv_1 = hw_ocv_after_sleep;
oam_car_1 =oam_car_1 + (10* (rtc_time_after_sleep.tv_sec -g_rtc_time_before_sleep.tv_sec)/3600);;
oam_car_2 =oam_car_1 + (10* (rtc_time_after_sleep.tv_sec -g_rtc_time_before_sleep.tv_sec)/3600);;
}
else
{
oam_car_1 =oam_car_1 + (40* (rtc_time_after_sleep.tv_sec -g_rtc_time_before_sleep.tv_sec)/3600); //0.1mAh
oam_car_2 =oam_car_2 + (40* (rtc_time_after_sleep.tv_sec -g_rtc_time_before_sleep.tv_sec)/3600); //0.1mAh
}
//etonguotao 2014-11-03
//if suspend current verylarge, it need reset FG meter data,
//and calculate batteryvoltage level in resume func.
if(upmu_is_chr_det() ==KAL_FALSE )
{
g_bat_cap_after_sleep= fgauge_read_capacity_by_v(hw_ocv_after_sleep);
BMT_status.SOC =BMT_status.UI_SOC = g_bat_cap_after_sleep;
battery_meter_reset();
}
/*[eton end]*/
}
else
{
oam_car_1 = oam_car_1 +(20* (rtc_time_after_sleep.tv_sec - g_rtc_time_before_sleep.tv_sec)/3600);//0.1mAh
oam_car_2 = oam_car_2 +(20* (rtc_time_after_sleep.tv_sec - g_rtc_time_before_sleep.tv_sec)/3600);//0.1mAh
}
bm_print(BM_LOG_CRTI,"sleeptime=(%d)s, be_ocv=(%d), af_ocv=(%d), D0=(%d), car1=(%d), car2=(%d)\n",
rtc_time_after_sleep.tv_sec- g_rtc_time_before_sleep.tv_sec, g_hw_ocv_before_sleep, hw_ocv_after_sleep,gFG_DOD0, oam_car_1, oam_car_2);
#endif
#endif
bm_print(BM_LOG_CRTI, "[battery_meter_resume].--eton--oam_v_ocv_2=%d, oam_v_ocv_1=%d, oam_car_1=%d, oam_car_2=%d\n",
oam_v_ocv_2,oam_v_ocv_1, oam_car_1, oam_car_2);
return 0;
}
10. 开关机充电曲线差异较大问题
原因及解决方法:
1)、P2采用的是脉冲充电的方式,充9秒钟,然后停1秒钟的形式,d5_count_time决定充电的每一步的时间,稍微增加d5_count_time值,可以使充电曲线变得平滑,但是不能加得过大,否则会导致电压上升太高,而显示示数确很低;
Void oam_run(void)
if(gFG_Is_Charging == KAL_FALSE)
d5_count_time = 80; //eton update by jorgen at 2014-7-10
charging_current = get_charging_setting_current();
charging_current = charging_current / 100;
// charging_current -= 150; //BMT_status.ICharging;
d5_count_time_rate =(((gFG_BATT_CAPACITY_aging*60*60/100/(charging_current-50))*10)+5)/10;
//调节d5_count_time的值,可以调节充电的每一步的时间,
//如果d5_count_time = 80,那么充电的每一步的检测时间是:80秒
//如果80秒之后,电压达到了预定的电池曲线的电压值,电量就会加1
d5_count_time =d5_count_time_rate;
2)、由于充电电流2A太大,容易导致电池电量虚高的问题,可以在这个读取电量的函数中,在读取电量的时候,停掉充电,读完之后再恢复充电。
kal_int32 battery_meter_get_battery_voltage(kal_boolupdate)
if(update == KAL_TRUE || pre_val == -1) {
//begin modified, etonguotao2014-11-11
if(upmu_is_chr_det() == KAL_TRUE)
kal_boolcharging_enable =KAL_FALSE;
/*stop charging for vbatmeasurement*/
battery_charging_control(CHARGING_CMD_ENABLE,&charging_enable);
val =get_battery_voltage_by_max77819();
ret =battery_meter_ctrl(BATTERY_METER_CMD_GET_ADC_V_BAT_SENSE, &val);
if(upmu_is_chr_det() == KAL_TRUE)
kal_boolcharging_enable =KAL_TRUE;
/*stop charging for vbatmeasurement*/
battery_charging_control(CHARGING_CMD_ENABLE,&charging_enable);
#ifdef MTK_BATTERY_LIFETIME_DATA_SUPPORT
if(g_sw_vbat_temp>gFG_max_voltage)
gFG_max_voltage =g_sw_vbat_temp;
if(g_sw_vbat_temp<gFG_min_voltage )
gFG_min_voltage = g_sw_vbat_temp;
这样做的好处是手机在使用过程中由于结构的变化导致距离传感器的读值与出厂设置的值差别很大时,仍能保证使用,缺点是门限值的误差可能会在±0.5cm。
以\alps\mediatek\custom\common\kernel\alsps\EPL2182_p2为例
#defineDYN_H_OFFSET 867//靠近门限值
#define DYN_L_OFFSET 335//远离门限值
#define PS_HIGH_OFFSET (867)//靠近门限值
#define PS_LOW_OFFSET (335)//远离门限值
(3)默认黑屏手势的距离远、近门限值修改(主要防止工厂工人在测试时忘记点击校准按钮)
#define CALI_HIGH_THRESHOLD 1500(这个是远离值+靠近门限值)
#define CALI_LOW_THRESHOLD 900(这个是远离值+远离门限值)
这个是项目经理安排工厂采集100组数据,必须使用灰卡测量3.5cm和5.5cm,还有黑卡0.5cm和远离时的读值,共四种数据。
注意事项:每次采集数据必须写清楚测量方法和测量数据要求,不然工厂会给出意想不到的结果。
请帮忙测量采集灰卡3.5cm,灰卡5.5cm,黑卡0.5cm和无遮挡时的读值,共四种,100组
ii每次采集数据必须写清楚测量方法和测量数据要求,邮件到工厂,不然工厂会给出意想不到的结果。
iii对采集数据要进行及时的分析,以确保结构是否合理,来保证psensor的一致性。
12. MODEM 卡识别问题:由于硬件设计,将SIM AB卡标识反,由于硬件修改困难,成本高,所以通过修改MODEM,软件解决此问题。
14. 前camera工厂模式测试偏绿问题
这个问题从现象上看是shading参数没跑,导致模组预览拍照四周偏绿。后来发现只有进入工厂模式之后才会出现这种现象。通过抓取相关log可以看出工厂模式的camera确实没有调用到shading这块参数,修改工厂模式相关代码,让其可以调用到shading参数问题得到解决。
15. 打开美颜,录完像后,相机卡死问题
原因分析:
这个问题是由于加大了预览分辨率,而美颜的预览分辨率要求比较低,过大的预览分辨率会导致buffer的溢出,从而导致卡死。
解决方法:
当打开美颜功能后,自动调低预览分辨率,关闭美颜后再恢复大分辨率预览。
问题升级:
上面是一种单独使用美颜的情况,还有一种就是按照上面的方法修改后,跟手势一起组合使用,还是会导致卡死的现象,针对这种现象的做法就是,做互斥,当打开手势的时候,关闭美颜的功能,这样做就可以避免卡死的问题。
四、 其它总结/建议
1.Launcher 固定位置图标应用,目前跟包名,类名绑定,但三方常常改变包名和类名。我方 Launcher 能否改成绑定 APK 名,或者从APK 中自动获取包名,类名,这样能减少集成三方应用之后出现的ICON 丢失的问题。
2.三方应用集成后,部分会导致待机电流大的问题,能否让测试组,验证三方应用的时候,增加一项检查,即三方应用对待机电流的影响的测试,这样免得项目后期发现待机电流大,再去查找的问题。
3. 英文模式,如果不去掉的话,建议大家别忘记检查这一项。添加资源的时候,别忘记两者都需要添加。
4. 超大字体,以后在小屏幕上,都不打开,建议策划写入文档,不然每个项目,都后期都纠结这个问题。
5. 量产前过BUG,是高效的做法,应该坚持。免得跟品质过的时候,无解决方案。
6. 运营商定制,什么情况下,选OP01,OP02问题。
亿通手机P2P301 项目软件总结相关推荐
- P2P301 项目软件总结
P2及P301项目软件总结 一. 项目回顾 1. 版本总结 P2到目前为止一共发布14个送测版本,A11,A12,A13已用于正式生产.P2由于三大件存在二供问题,还需要出A14 ...
- qgraphicsview 添加矩形框并拖动改变大小_如何用手机巧影软件为视频添加字幕
欢迎大家观看七夜视频工作室教程,我是七夜. 我们这次要讲的内容是如何用手机巧影软件为视频添加字幕,本次教程为图文教程非常简单! 我们的教程需要用到的软件是 巧影,很强大的视频剪辑软件,以后所有教程都会 ...
- android主流手机测试,硬件测试哪家强?安卓手机跑分软件横评
现在手机一款接着一款出,产品的噱头也是五花八门,很多朋友抱怨对手机不是很懂,因此在选择购买哪款手机的时候经常拿不定注意,害怕买了性价比不高的手机.那么,我们如何在没有那么多专业知识,对手机不慎了解的情 ...
- Android手机凡客项目介绍
Android手机凡客项目介绍 凡客诚品Android客户端是凡客诚品专为Android用户免费定制的购物软件,它与凡客网上万产品库对接,拥有商品搜索.浏览.收藏.查物流.购物车等功能,保持用户的体验 ...
- 手机网络应用客户端软件开发实践简介
网络应用与客户端软件 说到移动网络应用,前几年大家首先想到的就是WAP应用.最近随着市场上手机的可编程能力越来越强,手机软件开发平台和产业链的逐渐成熟,手机上的网络应用软件逐渐多了起来,如移动QQ.P ...
- 手机网络应用客户端软件开发实践简介(摘自www.j2medev.com)
网络应用与客户端软件 说到移动网络应用,前几年大家首先想到的就是WAP应用.最近随着市场上手机的可编程能力越来越强,手机软件开发平台和产业链的逐渐成熟,手机上的网络应用软件逐渐多了起来,如移动QQ.P ...
- 干扰网络信号的app_手机信号屏蔽软件?告诉你一个「真实有效」的屏蔽信号方法...
屏蔽手机信号就是通过某种利用某种设备或是某种方法使手机信号暂时消失或减弱的一种行为,多用于教育部门考试.国家机密机关以及机密项目的保密工作中.近年来随着手机等移动终端的日益普及,家庭使用屏蔽设备对无线 ...
- 基于 Android 系统手机通讯录管理软件【100010322】
基于 Android 系统手机通讯录管理软件 第一章 绪论 1.1 项目研究背景 经过多年的发展,移动终端不再仅是通讯网络的终端,还将成为互联网的终端.因此,移动终端的应用软件和需要的服务将会有很大的 ...
- [源码和文档分享]基于Android系统手机通讯录管理软件的设计与开发
摘要 谷歌在安卓领域投入了大量精力来开发,使得安卓技术得以广泛推广,现安卓移动平台设备在市场上已经得到大量推广及普及.在Android移动终端操作系统的快速发展,Android的各种手机软件也大量增长 ...
最新文章
- 使用Python分析姿态估计数据集COCO的教程
- 当前的三种构件标准规范
- Java多线程-线程通信
- linux lanmp 安装教程,Linux 安装 lanmp
- XP去除开机登陆画面
- FPGA设计中遇到的奇葩问题之“芯片也要看出身”(二)
- 记一次内网环境正向代理极光推送
- Linux系统Anaconda下载安装教程
- 音视频处理入门基础知识
- ubuntu 16.04 更换阿里源
- jwplayer html插件,jwplayer进阶HTML5
- 英雄联盟英雄皮肤抓取
- 坚持#第235天~哎呀,最近培训云计算忙得都把写博客的大事给忘了,赶快捡起来
- php引用复制,php引用和拷贝的区别
- 随机森林回归预测r语言_R包 randomForest 进行随机森林分析
- 苹果删除照片不释放内存_手机内存不足又卡顿,别瞎清理,删除这些文件夹,轻松释放几个G!...
- C语言——数据结构之广义表(概念及其存储结构)
- 你的眼中满是“变量”,可“变量”眼中是无相(Python)(Java与Python学习通法)
- 知道自己不知道不可怕,可怕的是不知道自己不知道 No.148
- html显示数组内容,在html表中显示js数组
热门文章
- 浙大计算机学院保研论坛,浙大环境与资源学院保研 - 浙江大学 - 保研论坛-保研经验分享 - Powered by Discuz!...
- CentOS关机与重启命令
- CentOS7-命令-立即关机命令(shutdown -h now)
- 美图秀秀笔试题:妖怪与和尚过河问题答案
- 我的C#第一次实验:中秋博饼
- vmware虚拟机ip地址自动改变解决办法
- 如何将Java代码导出变为可执行jar文件
- 新手小白用iMindMap怎么画思维导图
- imindmap如何添加箭头
- Java实现穷举_对数器实现(C++)