存档在 2013年3月

Android模拟器RAM修改方法

2013年3月29日

Android模拟器启动速度慢,运行也很缓慢。如何加速?可以通过修改Android模拟器的RAM大小来解决。一般情况下,真机的RAM都大得多。

我的模拟器配置路径为(Administrator目录是我的Windows用户名称,okayname.avd目录是所创建的OkayName模拟器设备名称)

C:\Users\Administrator\.android\avd\okayname.avd

okayname.avd目录下的congfig.ini就是OkayName模拟器设备的配置文件:

用EditPlus打开这个ini文件:

avd.ini.encoding=ISO-8859-1
hw.dPad=no
hw.lcd.density=240 # 是屏幕的密度
hw.cpu.arch=arm
hw.device.hash=-1812631727
hw.camera.back=none
disk.dataPartition.size=200M
skin.path=480×800 # 模拟器皮肤路径
skin.dynamic=yes
hw.keyboard=yes
hw.ramSize=512 # 模拟器的RAM运行内存大小
hw.device.manufacturer=Google
hw.sdCard=yes
hw.mainKeys=yes
hw.accelerometer=yes
skin.name=480×800
abi.type=armeabi
hw.trackBall=yes
hw.device.name=Nexus One
hw.battery=no
hw.sensors.proximity=yes
image.sysdir.1=platforms\android-10\images\ # 模拟器的映像文件路径
hw.sensors.orientation=no
hw.audioInput=yes
hw.gps=yes
vm.heapSize=512 # 虚拟机默认堆大小

这里主要是修改hw.ramSize这句,将后面的512换为更大的,比如增加为1G,在hw.ramSize=后面写1024,保存即可。然后启动AVD试试。

IP数据库:纯真+GeoIP

2013年3月29日

IP库,可以用来通过IP定位经纬度、国家/地区、省市,甚至街道等位置信息。

至少有以下三个IP库可供使用:

纯真IP数据库

由纯真网络维护,每5天更新一次,目前数据量在45万条。纯真网络提供一个.EXE安装文件(下载地址 http://update.cz88.net/soft/setup.zip ),下载到本地后安装,在安装目录中可以找到一个文件文件QQWry.Dat,它就是纯真IP数据库文件。

Maxmind.com GeoIP

FreeBSD 7.0-RELEASE-i386 + PHP5 + Apache2.2

# cd /usr/ports/net/pecl-geoip && make install clean
# apachectl restart
# cd ~
# fetch http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
# gunzip GeoIP.dat.gz
# mv GeoIP.dat /usr/local/share/GeoIP/GeoIP.dat
# fetch http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# gunzip GeoLiteCity.dat.gz
# mv GeoLiteCity.dat /usr/local/share/GeoIP/GeoIPCity.dat

<?php
echo geoip_database_info(GEOIP_COUNTRY_EDITION);

$country = geoip_record_by_name('wangblog.org');
if($country){
	echo "\nThis host is located in: \n";
	print_r($country);
}
?>

定时更新IP地址库的cron程序:

cd ~
/usr/bin/fetch http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
/usr/bin/gunzip GeoIP.dat.gz
mv GeoIP.dat /usr/local/share/GeoIP/GeoIP.dat
/usr/bin/fetch http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
/usr/bin/gunzip GeoLiteCity.dat.gz
mv GeoLiteCity.dat /usr/local/share/GeoIP/GeoIPCity.dat

以上保存为:update-ipdata-cron.sh

crontab -e

添加以下一行,每月5日0点10分运行:

10 0 5 * * /bin/csh /path/to/update-ipdata-cron.sh

kayako-geoip-data

介绍:http://portaliz.net/threads/kayako-geoip-data.3190/
下载:https://mega.nz/#!V0IxkA6Z!hvQHF62n-a8ftAy9C3AaA4bCzlX7nW3MzDN4m8bMGhs

怎样获取最新数据呢?

It is easy to locate potentially newer versions by simply googling “kayako __swift/geoip” or “Index of /kayako/__swift/geoip”,
and you will find lists of other peoples servers with the geoip data that is downloadable.

https://www.google.com/?gws_rd=ssl#safe=strict&q=Index+of+%2Fkayako%2F__swift%2Fgeoip

一堆啊…但是大多不是最新的,所以得筛除几个更新勤快的备用。

报错:Call-time pass-by-reference has been deprecated

2013年3月25日

用了引&$变量后发现错误Call-time pass-by-reference deprecated。

出现问题是因为:

allow_call_time_pass_reference Off

所以改一下为on就可以解决了:

allow_call_time_pass_reference On

怎样安装Zend Guard Loader

2013年3月24日

迅速安装zend-optimizer

参考:https://amon.org/zend-optimizer

Atomic源支持Fedora,RHEL和CentOS的YUM包管理。这里系统是CentOS6.2。

wget -q -O - http://www.atomicorp.com/installers/atomic | sh

安装完后在 /etc/yum.repos.d/ 目录会有一个 atomic.repo 文件。

Atomic仓库支持哪些软件可以到这个地址查看:http://www.atomicorp.com/channels/atomic/ 。有php、mysql、nginx、openvas、memcached、php-zend-guard-loader等软件。

yum安装zend-optimizer:

yum install php-zend-guard-loader

由于zend optimizer不支持php5.3,使用php5.3以上版本就要安装zend guard loader。

PHP 5.5:Zend Guard Loader for PHP 5.5
PHP 5.6:Zend Guard Loader for PHP 5.6
PHP 5.2 files encoded with Zend Guard 5.0 or Zend Guard 5.5 require Zend Optimizer as the runtime decoder.

手工安装zend guard loader

下载:http://www.zend.com/en/products/loader/downloads

参考:http://files.zend.com/help/Zend-Guard/content/installing_zend_guard_loader.htm
参考:http://www.cnblogs.com/qiandu/p/4201456
参考:https://serverpilot.io/community/articles/how-to-install-zend-guard-loader
参考:http://blog.chinaunix.net/uid-14735472-id-3764932
参考:http://jingyan.baidu.com/article/ceb9fb10dae0d98cad2ba005
参考:http://dedecms.com/knowledge/servers/linux-bsd/2012/0819/8491

wget http://downloads.zend.com/guard/7.0.0/zend-loader-php5.5-linux-x86_64_update1.tar.gz && tar zxvf zend-loader-php5.5-linux-x86_64_update1.tar.gz
cp -R zend-loader-php5.5-linux-x86_64/ /usr/local/zend/

编辑 php.ini ,在最后位置添加:

[Zend Guard]
zend_extension=/usr/local/zend/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path=

查证:

php -i | grep "Zend Guard Loader"

报错:

Failed loading /usr/local/php/lib/php/extensions/zend-loader-php5.5-linux-x86_64/ZendGuardLoader.so:  /usr/local/php/lib/php/extensions/zend-loader-php5.5-linux-x86_64/ZendGuardLoader.so: undefined symbol: executor_globals

参考:http://www.verydemo.com/demo_c101_i53243
参考:http://forums.zend.com/viewtopic.php?t=22958

参考:http://smilejay.com/2013/05/apache-mpm/
参考:http://www.aichengxu.com/view/934944

apache有两种运行模式:prefork模式;worker模式。区别请看:http://bbs.ywlm.net/thread-919-1-1
–with-mpm=worker 即worker模式,很多第三方模块不支持的
–with-mpm=prefork 重新编译apache就OK了。
如果用yum安装的,默认用的是prefork模式,这是为了兼容性。

参考:http://files.zend.com/help/Zend-Guard/content/installing_zend_guard_loader.htm
参考:http://www.phpfans.net/ask/question2/2455115949

参考:http://forums.zend.com/viewtopic.php?t=126063

Zend Guard Loader requires PHP NTS (non-thread-safe) and when loaded under Apache, use Prefork MPM.

参考:http://stackoverflow.com/questions/22201013/error-failed-loading-opcache-so-opcache-so-undefined-symbol-compiler-globals
参考:http://stackoverflow.com/questions/13883646/apache-prefork-vs-worker-mpm

You’re using Apache2 MPM. So PHP builds an ZTS (Zend Threaded System) build. See Apache Prefork vs Worker MPM for a discussion on this. With MPM PHP stores its compiler globals in a thread array. However, OPcache is looking for the non-threaded version of this structure compiler_globals.

IMO, if you are using a PHP, then using MPM is a mistake as (i) the PHP runs ~25-50% slower, (ii) many extension don’t work; (iii) OPcache isn’t properly tested with ZTS builds. Stick to a Prefork worker configuration, and rebuild.

以 –with-mpm=prefork 参数重新编译安装Apache2:

./configure --prefix=/usr/local/apache2 --enable-mods-shared=most --with-mpm=prefork --with-crypto --enable-rewrite --enable-headers --enable-deflate --enable-socache-shmcb --enable-negotiation --enable-ssl --with-ssl=/usr/lib --enable-http2 --with-nghttp2=/usr/local/lib

查看当前apache中已经编译了的模块:

service httpd  -l

输出:

Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  prefork.c

由于MPM只能在编译时指定其中一种,所以列出的静态模块中MPM只有1个:

查看httpd加载的所有模块(包括静态编译的和动态共享的模块):

service httpd -t -D DUMP_MODULES

输出:

Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_prefork_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 dir_module (shared)
 alias_module (shared)
 cgid_module (shared)
 php5_module (shared)

查看 httpd.conf,有关于 mpm 模式的设置:

# Server-pool management (MPM specific)
#Include conf/extra/httpd-mpm.conf

conf/extra/httpd-mpm.conf 的对应设置:

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxRequestWorkers: maximum number of server processes allowed to start
# MaxConnectionsPerChild: maximum number of connections a server process serves
#                         before terminating
<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

参考:https://smyl.es/how-to-fix-ioncubezendguard-undefined-symbol-executor_globals-after-upgrading-apache-and-php/
参考:http://stackoverflow.com/questions/17272439/how-to-enable-zts-on-php
参考:https://github.com/krakjoe/pthreads/issues/436

重新编译安装PHP
重新安装ZendOptimizer
在程序都重新编译安装完后,重启Apache,就可以了

输出:

with Zend Guard Loader v3.3, Copyright (c) 1998-2014, by Zend Technologies
Zend Guard Loader
Zend Guard Loader => enabled

部署zend guard

实证未遂。

参考:http://files.zend.com/help/Zend-Guard/content/install.htm
参考:http://static.zend.com/topics/Zend-Guard-Release-Notes-v5-5.txt

下载:http://www.zend.com/en/products/guard/downloads

http://downloads.zend.com/guard/7.0.0/ZendGuard-7.0.0-linux.gtk.x86_64.tar.gz
http://downloads.zend.com/guard/6.0.0/ZendGuard-6_0_0-linux.tar.gz
http://downloads.zend.com/guard/5.5.0/ZendGuard-5_5_0.tar.gz

wget http://downloads.zend.com/guard/5.5.0/ZendGuard-5_5_0.tar.gz && tar zxvf ZendGuard-5_5_0.tar.gz && ./ZendGuard-5_5_0.bin

在Android模拟器中安装APK文件

2013年3月22日

启动模拟器:

1、桌面上双击图标启动 AVD Manager.exe

2、在弹出面板中选择一个AVD设备“Start”

3、模拟器面板出现,左侧显示“Android…”,直到显示Android启动页,点击右侧控制面板中的“Menu”按钮打开桌面。

启动CMD窗口:
1、执行 Windows开始菜单》运行》打开》输入cmd,打开CMD窗口。
2、Android SDK目前安装路径为d盘,需要转换路径过去:

C:\Users\Administrator>d:
D:\>cd Program Files\Android\android-sdk\platform-tools
D:\Program Files\Android\android-sdk\platform-tools>

3、查看设备状态:

D:\Program Files\Android\android-sdk\platform-tools>adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
emulator-5554 offline
D:\Program Files\Android\android-sdk\platform-tools>adb devices
List of devices attached
emulator-5554 device

安装App:
1、把需要安装的APK文件复制到platform-tools文件夹。
2、执行安装命令:

D:\Program Files\Android\android-sdk\platform-tools>adb install com.okayname.apk
61 KB/s (2210700 bytes in 35.025s)
pkg: /data/local/tmp/com.okayname.apk
Success

删除App:

到 /data/app 里面把对应的App移除就OK 了。 rm filename , 需要在adb shell 里面完成。

D:\Program Files\Android\android-sdk\platform-tools>adb shell
# cd data
cd data
# cd app
cd app
# ls
ls
com.okayname.apk
# rm com.okayname.apk
rm com.okayname.apk

同时启动有2个AVD模拟器时:
比如当执行安装命令:

adb install com.okayname.apk

提示错误:

error: more than one device and emulator

第一种情况:确实用多个设备或者模拟器,解决办法是指定连接某一个模拟器

1、获取模拟器列表

adb devices

2、指定device来执行adb shell,在多模拟器的时候,执行adb命令一般都需要用参数-s指定device。

adb -s devicename shell

例1:安装emulator-5554上的包com.okayname

adb -s emulator-5554 install com.okayname.apk

第二种情况:确实有一个设备或者模拟器,之所以显示有多个,是因为此设备用过两次。解决办法:重新启动adb.exe服务。

1、获取模拟器列表

adb devices

会看到这个设备有两种状:offline 和 device

2、重新启动adb.exe服务:

adb start-server

终极方法:

如果上述方法不可以,打开任务栏,选择“进程”选项卡,找到adb.exe进程,结束之,重新启动就完事OK。

或者在命令窗口输入命令:

adb kill-server