手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:参考

详解谷歌官方教程 Android插件ADT 9.0.0

本文其实已经过时了,但还是可以值得一看,以当作资料,至少我在下载的时候,已经是15.0了,而不是文中说的9.0
我摘抄的文章来自于:http://kb.cnblogs.com/page/91451/

OK,上原文:

  ADT为Android开发工具(Android Development Tools)简称,是在强大的、集成的环境Eclipse IDE中构建Android应用程序插件。

  ADT扩展了Eclipse的功能,让您快速建立新的Android项目,创建一个应用程序的用户界面,加上Android框架的API组件、调试应用程序使用Android SDK工具,以便APK分发给应用程序。

  首先,强烈建议尽快开始使用Eclipse开发插件ADT。随着项目设置我们将提供指导、以及工具的集成和自定义XML编辑器,并在ADT给你的一个令人难以置信的开发Android应用环境。

  本文提供从Eclipse开发环境分步说明到如何安装下载的ADT插件的全过程,请注意只有当你有Android兼容版本的SDK安装在Eclipse IDE时你才能安装或使用ADT。

  如果您已经使用ADT的,本文还提供了有关如何更新ADT的最新版本或如何卸载它的必要的指示。

  ADT最新修订内容

  以下我们提供有关后续版本的ADT插件的版本号

  ADT 9.0.0 (2011年1月)

  ADT 9.0.0与Android R9 SDK工具的关系:

  ADT 9.0.0是专为Android R9 SDK工具提供的插件。

  一般注意事项:

  转至声明”超链接支持:可以直接从代码引用(R.id.main )跳到相应的XML声明或从清单的XML登记的活动和服务。

  改进了的名字重构。

  改进的可视化布局编辑器等。

  ADT 8.0.1 (2010年12月)

  ADT 9.0.0是专为Android R8 SDK工具提供的插件。

  一般注意事项:

  这是一个快速跟进ADT的8.0.0修正了一些错误。

  修复了问题,哪些项目编译失败,理由是敏捷的错误。

  更好ProGuard的错误报告时发布出口申请。

  安装ADT插件

  下面我们将说明如何下载和安装Eclipse ADT。

  准备工作

  ADT是为Eclipse IDE的插件。在安装或使用ADT时,你必须安装一个兼容版本的Eclipse在你的电脑上。

  如果Eclipse已经安装在你的电脑,请确保它是一个兼容AndroidSDK与ADT版本。

  如果您需要安装或更新Eclipse,你可以从这个位置下载它:

 http://www.eclipse.org/downloads/

  此外,在你可以配置或使用ADT时,你必须安装Android SDK的启动包,如我们提供下载Android R9 SDK的入门包 。 具体来说,您需要安装一个Android SDK工具兼容版本和至少一个开发平台。 为了简化ADT的设置,我们建议安装的Android SDK之前安装ADT。

  当您的Eclipse和Android SDK的环境都准备好了,请按照下面的步骤来完成ADT安装。

  ADT插件下载

  使用Update Manager里的Eclipse安装功能,把ADT的最新版本安装在你的电脑上。

Eclipse 3.5 (Galileo) and 3.6 (Helios) Eclipse 3.4 (Ganymede)
  1. Start Eclipse, then select Help > Install New Software....
  2. Click Add, in the top-right corner.
  3. In the Add Repository dialog that appears, enter "ADT Plugin" for the Name and the following URL for theLocation:https://dl-ssl.google.com/android/eclipse/

    Note: If you have trouble acquiring the plugin, try using "http" in the Location URL, instead of "https" (https is preferred for security reasons).

    Click OK.

  4. In the Available Software dialog, select the checkbox next to Developer Tools and click Next.
  5. In the next window, you'll see a list of the tools to be downloaded. Click Next.
  6. Read and accept the license agreements, then clickFinish.
  7. When the installation completes, restart Eclipse.
  1. Start Eclipse, then select Help > Software Updates.... In the dialog that appears, click the Available Softwaretab.
  2. Click Add Site.
  3. In the Add Site dialog that appears, enter this URL in the "Location" field:https://dl-ssl.google.com/android/eclipse/

    Note: If you have trouble acquiring the plugin, you can try using "http" in the URL, instead of "https" (https is preferred for security reasons).

    Click OK.

  4. Back in the Available Software view, you should see the plugin listed by the URL, with "Developer Tools" nested within it. Select the checkbox next to Developer Tools, which will automatically select the nested tools. Then click Install
  5. On the subsequent Install window, all of the included tools should be checked. Click Next.
  6. Read and accept the license agreements, then clickFinish.
  7. When the installation completes, restart Eclipse.

  安装兼容版本的Eclipse IDE的,请查看这个地址。完成这些之后请按照下列步骤下载ADT插件并安装在你的Eclipse环境中。

  ADT插件配置

  成功下载ADT的如上所述之后,修改Eclipse的ADT的参数指向了Android SDK目录:

  选择 Window > Preferences... 打开参数面板(在Mac OS X上请选择: Eclipse > Preferences  )。

  选择Android从左侧面板。

  对于Android SDK位置在主面板,点击 浏览并找到您下载的SDK目录。

  单击“应用”后 ,点击“确定”。

  如果你没有遇到任何问题,则安装完成。 如果你是第一次安装了Android SDK的,返回到 安装Android SDK来完成您的设定。

  ADT的安装故障排除

  如果你按照以上步骤无法下载的ADT插件,这里有一些建议:

  如果Eclipse无法找到远程更新站点,尝试改变远程站点的URL使用的HTTP而不是HTTPS,包含ADT插件。 也就是说,设置远程站点的位置:

 http://dl-ssl.google.com/android/eclipse/

  如果您仍然无法使用Eclipse ADT的下载站点为远程更新插件,你可以下载ADT压缩文件下载到你的电脑上,然后手动安装它:

Name Package Size MD5 Checksum
ADT 9.0.0 ADT_9.0.0.zip 4433536 bytes bc2757f2a5a11d131390ce547bae154b

  浏览并选择下载的zip文件。

  输入本地更新站点的名称(例如,“Android Plugin”)。

  单击“确定”。

-------

Tags: google, adt, android

INI配置文件的解析

我不知道怎么说才好,因为我在读INI文件的时候,往往都是用现成的函数:parse_ini_file或者是parse_ini_string,但怎么写入,就是另外的方法了(自己实现。。。。)

所以看到这篇文章的时候,我也才刚刚知道,原来,还有一个dba的函数可以用,嗯,仔细看了一下dba这个函数的installtion,发现支持inifile也是从PHP5才开始实现的。好吧,相应的dba相关的可以看看这里:http://www.php.net/manual/en/dba.installation.php,详细的还是看这里吧:http://www.php.net/manual/en/book.dba.php

OK,上原文,它来自于:http://www.cardii.net/php-spl-parse-ini-file/。

曾经介绍过SPL的各类型接口和迭代器。今天,在浏览PHP源码目录时,发现有个解析INI文件的例子,觉得不错,于是整理了一个实例,拿来分享下。

在PHP应用程序中,配置文件不可或缺,特别是商城,CMS之类的产品,不同的客户需求不同,当然,不会每个客户开发一套程序,好办法的是每个客户 有一套不同的配置文件。适合做配置文件的我曾经也说过,主要有四类:PHP数组(几乎其他的配置方法最终都是解析成为PHP数组),XML,YAML和 INI。今天只讲INI文件。ZendFramework使用此配置。

下看个DbaReader类。文件名为 DbaReader.php:

PHP代码
  1. <?php  
  2. class DbaReader implements Iterator  
  3. {  
  4.   
  5.     protected $db = NULL;  
  6.     private $key = false;  
  7.     private $val = false;  
  8.   
  9.     /** 
  10.      * Open database $file with $handler in read only mode. 
  11.      * 
  12.      * @param file    Database file to open. 
  13.      * @param handler Handler to use for database access. 
  14.      */  
  15.     function __construct($file$handler) {  
  16.         if (!$this->db = dba_open($file'r'$handler)) {  
  17.             throw new exception('Could not open file ' . $file);  
  18.         }  
  19.     }  
  20.   
  21.     /** 
  22.      * Close database. 
  23.      */  
  24.     function __destruct() {  
  25.         dba_close($this->db);  
  26.     }  
  27.   
  28.     /** 
  29.      * Rewind to first element. 
  30.      */  
  31.     function rewind() {  
  32.         $this->key = dba_firstkey($this->db);  
  33.         $this->fetch_data();  
  34.     }  
  35.   
  36.     /** 
  37.      * Move to next element. 
  38.      * 
  39.      * @return void 
  40.      */  
  41.     function next() {  
  42.         $this->key = dba_nextkey($this->db);  
  43.         $this->fetch_data();  
  44.     }  
  45.   
  46.     /** 
  47.      * Fetches the current data if $key is valid 
  48.      */  
  49.     private function fetch_data() {  
  50.         if ($this->key !== false) {  
  51.             $this->val = dba_fetch($this->key, $this->db);  
  52.         }  
  53.     }  
  54.   
  55.     /** 
  56.      * @return Current data. 
  57.      */  
  58.     function current() {  
  59.         return $this->val;  
  60.     }  
  61.   
  62.     /** 
  63.      * @return Whether more elements are available. 
  64.      */  
  65.     function valid() {  
  66.         if ($this->db && $this->key !== false) {  
  67.             return true;  
  68.         } else {  
  69.             return false;  
  70.         }  
  71.     }  
  72.   
  73.     /** 
  74.      * @return Current key. 
  75.      */  
  76.     function key() {  
  77.         return $this->key;  
  78.     }  
  79. }  
  80. ?>  

DbaReader使用Iterator接口,当然要实现里面的5个迭代方法。迭代方法对handlerhandlerINI文件的解析,用到了dba扩展。

说点题外话,什么是Dba?为什么使用Dba?
Dba是一款数据库,确切点说,是一款索引化的文件存储系统。适合相对比较静态的索引化的数据存储。所有版本的Linux都会带此数据库。
既然使用文件来存储数据,为什么还有使用Dba呢?原因有二:
1数据记录的存储长度可以不是固定的;
2使用索引存储和检索数据。

DbaReader提供一个访问INI文件数据的迭代方法,如果需要存储删除数据呢?所以DbaArray在继承DbaReader的基础上,实现了此功能。

PHP代码
  1. <?php  
  2. class DbaArray extends DbaReader implements ArrayAccess  
  3. {  
  4.   
  5.     /** 
  6.      * Open database $file with $handler in read only mode. 
  7.      * 
  8.      * @param file    Database file to open. 
  9.      * @param handler Handler to use for database access.取值http://www.php.net/manual/en/dba.requirements.php 
  10.      */  
  11.     function __construct($file$handler)  
  12.     {  
  13.         $this->db = dba_popen($file"c"$handler);  
  14.         if (!$this->db) {  
  15.             throw new exception("Databse could not be opened");  
  16.         }  
  17.     }  
  18.   
  19.     /** 
  20.      * Close database. 
  21.      */  
  22.     function __destruct()  
  23.     {  
  24.         parent::__destruct();  
  25.     }  
  26.   
  27.     /** 
  28.      * Read an entry. 
  29.      * 
  30.      * @param $name key to read from 
  31.      * @return value associated with $name 
  32.      */  
  33.     function offsetGet($name)  
  34.     {  
  35.         $data = dba_fetch($name$this->db);  
  36.             if($data) {  
  37.             if (ini_get('magic_quotes_runtime')) {  
  38.                 $data = stripslashes($data);  
  39.             }  
  40.             //return unserialize($data);  
  41.             return $data;  
  42.         }  
  43.         else  
  44.         {  
  45.             return NULL;  
  46.         }  
  47.     }  
  48.   
  49.     /** 
  50.      * Set an entry. 
  51.      * 
  52.      * @param $name key to write to 
  53.      * @param $value value to write 
  54.      */  
  55.     function offsetSet($name$value)  
  56.     {  
  57.         //dba_replace($name, serialize($value), $this->db);  
  58.         dba_replace($name$value$this->db);  
  59.         return $value;  
  60.     }  
  61.   
  62.     /** 
  63.      * @return whether key $name exists. 
  64.      */  
  65.     function offsetExists($name)  
  66.     {  
  67.         return dba_exists($name$this->db);  
  68.     }  
  69.   
  70.     /** 
  71.      * Delete a key/value pair. 
  72.      * 
  73.      * @param $name key to delete. 
  74.      */  
  75.     function offsetUnset($name)  
  76.     {  
  77.         return dba_delete($name$this->db);  
  78.     }  
  79. }  
  80. ?>  
使用范例
构建文件text.ini,内容如下:
XML/HTML代码
  1. host = localhost  
  2. password = password  
  3. database = data  

 

文件index.php.代码如下:

PHP代码
  1. <?php  
  2. function loadClass($class)  
  3. {  
  4.     require_once __DIR__.DIRECTORY_SEPARATOR.$class.'.php';  
  5. }  
  6. spl_autoload_register('loadClass',false);  
  7.   
  8. $iniFile = __DIR__.DIRECTORY_SEPARATOR.'test.ini';  
  9.   
  10. $ini = new DbaArray($iniFile,'iniFile');  
  11. echo $ini['database'];  
  12. var_dump($ini);  
  13. ?>  
--EOF--

看完上面这一段,是不是有什么想法?原来ini的操作也是这么的方便?不过,如果是纯读取的话,我还是比较推荐于parse_ini_file之类的(突然间忘了,如果编码不一样怎么办?ansi/utf-8,这真是一个永恒的痛。)

FORM提交后,表单值保存在FORM中

PHP代码
  1. header('Cache-control: private, must-revalidate');  
  2. session_cache_limiter("private");  

随便记录。。。

在非IE浏览器中实现“灰阶化[1]”

原文:http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/

在非IE浏览器中实现“灰阶化[1]”

这个问题看似简单,实际上要付出很大的努力[2]。要的结果很简单:在所有非IE浏览器中模拟Internet Explorer浏览器的grayscale(灰度)滤镜。然而,它的解决方法并非你想得那么简单,这也让我着实大大地吃了一惊。

在 IE中,grayscale滤镜可以应用到任意一个元素中,它会很直观地将元素转变为灰度。可以使用下面 这行复杂且专有的CSS来实现grayscale滤镜。

JavaScript代码
  1. elem.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)';  

如上所示,在IE中实现这种效果简单是小菜一碟;然而,在其他的浏览器中,需要引起很大的关注。

需要有两件情况值得考虑:图片元素和非图片元素。“非图片”类元素实现十分简单:在当前文档中遍历每个元素,寻找类似“backgroundColor”和 “color”的色彩属性,将它的RGB颜色值转换为灰度值。有不少方法可以实现;注意我们这里不是说降低图片的饱和度;“灰阶化”很明显跟它不一样。

JavaScript代码
  1. // Desaturate:降低饱和度  
  2. function RGBtoDesat(r,g,b) {  
  3. var average = (r + g + b) / 3;  
  4. return {  
  5. r: average,  
  6. g: average,  
  7. b: average  
  8. };  
  9. }  
  10.    
  11. // Grayscale:灰阶化  
  12. function RGBtoGrayscale(r,g,b) {  
  13. var mono = parseInt( (0.2125 * r) + (0.7154 * g) + (0.0721 * b), 10 );  
  14. return {  
  15. r: mono,  
  16. g: mono,  
  17. b: mono  
  18. };  
  19. }  

因此,每个带颜色属性的元素要使用它来转为灰阶;初始颜色用来重置属性值。

我们的图片能否转为灰阶取决于两个因素;一是浏览器必须要支持HTML5 canvas元素和它getImageData方法,二是主机上的所有图片必须位于同一域名下;除此外,主机上的图片不能脱离getImageData方法而不管它是否支持[3]。Google Chrome浏览器和Safari(4以下版本)由于不支持getImageData,先不作讨论。其他的浏览器支持canvas元素,完全可以做到“灰阶化”图片。

实现这种方式是要“手工”遍历图片中的每一像素,并应用我们用来设置CSS 颜色属性的RGBtoGrayscale函数。真要这样做的话,浏览器绝对吃不消;除非有极其快速的Javascript引擎来承受大图片处理的压力。

鉴于上面提到的原因,因此在任一个元素需要“灰阶化”前,添加一个“预置”函数去运行显得尤为必要,这个函数可以使用零超时递归技术[4]来避免耗死浏览器。如果仅仅是小图片需要转换的话,不必使用“预置”函数,可以直接使用这种暴力转换。

为什么呢,这是为什么呢?

你肯定想知道在“灰阶化”会有哪些应用。那么,比如说:降低色彩以减少用户的视觉焦点,以此来减少用户对你网站上五颜六色东西的关注;比如说,光箱特效。像 vBulletin的论坛系统就使用了这种效果,它会你点击离开时,将页面变灰;然后会弹出确认框,这个确认框非很容易识别,因为它是页面中惟一的带色彩的东西。

“灰阶化”困扰我的真实原因是因为我很想知道是否有可能做到这个目的。我已经知道在IE浏览器里有这个滤镜,我还想看看在其他浏览器中能否模拟实现这种方便的特效。我也知道这种特效可能被认为已经过时了,但这并不重要;我仅仅是对实现它很感兴趣。

示例

我做了一个示例页面,上面有几个格斗士[5]的图片,功能已经在这篇文章中说过了。注意,在Safari(小于4)或才 Chrome(还有可能在Firefox老版本(V.2以前))不起作用;不要忘了它仅仅是一个试验。
http://james.padolsey.com/demos/grayscale/

使用方法

要对一个元素实现“灰阶化”需要调用 grayscale()函数,并将元素作为参数传递,比如:
JavaScript代码
  1. var el = document.getElementById( 'myEl' );  
  2. grayscale( el );  
  3. // 也可以传递一个DOM集合  
  4. // (这样所有的元素都会得到“灰度效果”)  
  5. grayscale( document.getElementsByTagName('div') );  
  6.  //也可以在jQuery对象集合中使用  
  7. grayscale( $('div') );  
若要重置元素(返回到原来的颜色状态)必须调用grayscale.reset(),并将需要重置的元素作为参数传递:
JavaScript代码
  1. grayscale.reset( el );  
  2. // reset()同样可以接受DOM对象或jQuery对象集合参数  
  3. grayscale.reset( $('div') );  
其中的prepare函数,上面已经讲过了,在有大图片要处理的情况下需要使用到,或者即使只是几个小图片。注意大图片需要有一会儿的时间去处理(一张 300×300的PNG格式图片在“预置”方式下需要耗费3秒钟的时间)。
JavaScript代码
  1. grayscale.prepare( document.getElementById('myEl') );  
  2. // 同样可以接受DOM对象或jQuery对象集合参数  
  3. grayscale.prepare( $('.gall_img') ); 

[完]

注:

[1]:灰阶化:原文grayscaling,意为“采取灰度标准”,即灰阶化,将图片由彩色转为灰度;
[2]原文为”This started out as a little experiment and eventually turned into quite an endeavor.“,可能存在翻译问题;
[3]原文为“externally hosted images cannot be passed into ‘getImageData’ regardless of whether it’s supported.”,翻译存疑;
[4]零超时递归技术:原文zero-timeout recursion technique,应为zero-time recursive technique;参见http://en.wikipedia.org/wiki/Recursion_(computer_science)
[5]格斗士:原文blood-thirsty hunters,嗜血的猎人

--EOF--
灰阶化可以用在414或者512,值得用用喽。。。

 

 

老王:如何修复损坏的MyISAM表

myisam如果经常insert,update,delete会产生很多的碎片,而且因为表类型的关系,其实它如果使用不当,也会有损坏的情况发生,一般情况下,可以使用repair table来进行修复。老王说,尽量使用 myisamchk来进行修复,因为这是命令行下的,所以,我没有用过。命令行下,我用的也是repair table。
所以,我转载了老王的这篇博客,写完后,老王又来了一篇TableCache设置过小造成MyISAM频繁损坏,看来,myisam表之所以容易损坏,和tablecache的设置还是有关的。

修复表的原文如下:
当我们用PHPMyAdmin浏览数据库时,有时候会发现某些MyISAM表的Collation项显示为“in use”,这多半说明此表已经损坏。即便是没有出现“in use”字样,也不能就此说明表是完好无损的,熟悉检查及修复方法是必须的。

通过语句:

检查表使用CHECK TABLE语句,如下:

CHECK TABLE tbl_name [, tbl_name] ... [option] ...
option = {FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED}

修复表使用REPAIR TABLE语句,如下:

REPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE
    tbl_name [, tbl_name] ...
    [QUICK] [EXTENDED] [USE_FRM]

通过命令:

检查修复表可以使用myisamchk命令:

myisamchk [options] tbl_name ...

如果没有指定参数,那么myisamchk命令缺省执行的就是检查动作。若是要修复表,可以使用-r或-o参数,应该优先使用-r修复,不行的话再使用-o修复。此外,在修复前应该使用FLUSH TABLES刷新缓存,并关闭数据库服务器或者锁定所有的待修复表,以确保在修复过程中不会有其他写操作。

自动修复:

在my.cnf配置文件中的mysqld部分设定myisam-recover参数,当服务启动时可以自动修复有问题的表(速度快慢视数据多少):

[mysqld]
myisam-recover [= options]

参数有DEFAULT,BACKUP,FORCE,QUICK,可以设定为BACKUP,FORCE,万万不可单独设置成FORCE,否则数据文件丢了都没处哭去。


应该尽量使用myisamchk命令去修复,不行再用repair语句去修复(慢),还不行就参考下面链接。

参考文档:How to Repair Tables
而对于tablecache的设定,老王建议:如果你比较懒惰,也可以用MySQL Performance Tuning Primer Script来判断参数是否合理

Tags: myisam, mysql, 修复