One World One Dream

Love and Peace

2009-09-05

EclipseのインストールからAndroidでApiDemosを動かすまで。

EclipseのインストールからAndroidでApiDemosを動かすまで。


November 25, 2007 6:22 PM
No Comments
No TrackBacks






最近ブログをまともに書いていなかったので、久しぶりに少し役に立つエントリを書いてみようと思います。



先日Googleの携帯電話プラットフォーム「Android」のSDKが公開されました。僕はずっと携帯やWalkmanのようなモバイル上で動くアプリケーションを作ってみたいと思っていたので今回のSDKの公開はものすごく歓迎なことです。(iPhone/iPod touchのSDKの公開も待ちどおしい)



まだドキュメントをちゃんと読んでいないのですが、AndroidはJavaで書くようであります。Javaの開発ツールといえばEclipseが有名ですが、Android開発用のプラグインもhttp://code.google.com/android/download.htmlからダウンロードできます。



ここまで準備してくれたGoogle様には素晴らしいの一言に尽きますが・・・ここまでGoogleがやってくれても英語になれない人、Eclipseなんてしらねーという人には敷居が高いんじゃないかなと考えています。実際、僕自身、一年前まではEclipseなんて触ったこともないし、Visual Studioを使ってのWindowsアプリ開発が仕事だったので当時の僕であれば開発を始めるのにも苦労したんじゃないかと思うからです。



今回、AndroidのEclipse Plug-inがEclipse 3.3向けで普段使っていたのがEclipse 3.2だったので、Eclispe 3.3のインストールからやり直すことになったのですが、その際のインストールメモを書きました。そんなわけで、英語に自身のない方、Eclipse使ったことない方向けに、参考になればということでここに公開します。



0) はじめに



今回のメモはWindows限定です。

いろんなファイルはC:\Devに置くことで進めます。

各自の環境に応じて読み替えてください。



1) Android SDKのインストール



まずはSDKのインストール。インストールって言ってもダウンロードして解凍して置くだけです。

http://code.google.com/android/download.htmlからWindows版を落として解凍、以下に配置します。



view sourceprint?1.C:\Dev\SDK\Android\

2.

docs

3.

samples

4.

tools

5.

...

2) Eclipse 3.3のインストール



次にEclipse 3.3をインストールします。日本語化もします。



a) JRE

http://www.java.com/ja/download/

Eclipseなどjavaアプリを動かすために必要です。



b) Eclipse 3.3 (Europa)

http://www.eclipse.org/downloads/からClassicをダウンロードします。+Lhacaだとうまく解凍できなかったので、XPのzip解凍で展開します。

ちなみにEclipseにはインストーラはなく、解凍したフォルダを好きなところにおいて実行できます。



c) 日本語プラグイン(Pleiades)

http://mergedoc.sourceforge.jp/

Eclipse 3.3用の日本語ローカライズは本家からはリリースされていません。(2007/11現在)

Pleiadesにはオールインパッケージもありますが、ここではプラグインだけをhttp://mergedoc.sourceforge.jp/ からDLします。とりあえず現時点で最新のPleiades 1.2.1.p15をDLしました。DLしたら展開して、Eclipseのフォルダに上書きします。



eclipse.iniをeclipse.ini.orgにリネームし、Pleiadesからコピーされたeclipse.ini.sample.3.3をeclipse.iniにリネームします。



Eclipseを起動します。最初はPleiadesからコピーされた





view sourceprint?1.eclipse.exe -clean.cmd

を実行します。このcmdで-cleanオプションでeclipseが実行されます。次回以降は直接eclipse.exeを実行してokです。



Eclipseを起動するとはじめにWorkspaceを選択せよ。と言われます。これはVisual StudioでいうとSolutionに近いもので、複数のプロジェクトをWorkspaceという形でまとめたり、Eclipseの設定もこのWorkspaceごとに保存することができます。EclipseのWorkspaceとは単純にDirectoryです。おそらく、開発プロジェクト単位でWorkspaceを分けるのが良いのではないかと思います。



ここではC:\Dev\Workspaceというフォルダを選択します。(フォルダはなければ自動で作成されます)

ちなみにEclipseの設定などは指定したフォルダ直下に.metadataというフォルダが作成されこの中にファイルとして保存されます。



3) Android Eclipse Plug-inのインストール



EclipseのプラグインはURLを指定するだけでインストールやアップデートできる仕組みがあります。



Eclipseを起動し、ヘルプ -> ソフトウェア更新 ->検索およびインストール -> インストールする新規フィーチャーを検索 -> 次へ (Help -> Software Updates -> Find and Install... -> Search for new features to install -> Next... )、新規リモートサイトボタンを押して下記を入力



view sourceprint?1.Name: Android

2.URL: https://dl-ssl.google.com/android/eclipse/

これでAndroid Eclipse Plug-inがインストールされます。

再起動を促されたらそれに従います。



4) Android の設定



EclipseにAndroidのSDKのパスを設定します。



ウインドウ(W) -> 設定(P)...

TreeViewからAndroidを選択し、SDK Location: にAndroidのSDKのフォルダC:\Dev\SDK\Android\を指定します。



5) Android ApiDemos プロジェクトの作成



ファイル(F) -> 新規(N) -> プロジェクト(R)...

で新規プロジェクトウインドウを開きます。



新規プロジェクトウインドウからAndroid -> Android Projectを選択して次へ



view sourceprint?1.「ワークスペース内に新規プロジェクトを作成」を選択

2.「デフォルト・ロケーションの使用」を選択

3.プロジェクト名:apidemos

4.パッケージ名:android.apidemos

5.Activity name:apidemos

6.アプリケーション名:apidemos

を下記に入れて終了です。

ここで入れる内容はあとでsamplesのファイルで上書きしてしまうのでプロジェクト名以外は適当で良いです。



プロジェクトが作成されたら、Windowsのエクスプローラ上でSDKにあるサンプルのファイルを、プロジェクトのソースに上書きしちゃいます。

具体的には

C:\Dev\SDK\Android\samples\ApiDemosの内容を

C:\Dev\Workspace\apidemosに上書きしてください。



次にEclipseのパッケージエクスプローラ上でapidemosのプロジェクトを右クリックして「更新」を選択します。Eclipse外で更新があったファイル、ディレクトリやファイルの増減がこれで更新されます。



また、src\android.apidemosは不要になったのでEclipseのパッケージエクスプローラから選択して削除します。



Eclipseのパッケージエクスプローラ上でapidemosのプロジェクトを右クリックして、

実行(R) -> Android Application

を実行します。



Android Emulartorが実行され下記画面が表示されたらokです。





とりあえず、メモ書きをもとにまとめてみました。ですが、初めてEclipseを使う人にとってはまりそうなところを経験上からくる無意識(当然)の回避によって抜かしているような気もしています。メモにはないけれどはまりそうなところがあればお知らせください。



※(2007/12/06追記) 会社でやったら日本語化されなかったorz、eclipse.iniの編集を手順に追加しました。


From:http://blog.makotokw.com/2007/11/25/eclipseandroidapidemo/

标签:

git install in Ubuntu

1.
ubuntu% cd /tmp
ubuntu% wget http://www.kernel.org/pub/software/scm/git/git-1.6.0.tar.gz
ubuntu% tar zxvf git-1.6.0.tar.gz
ubuntu% cd git-1.6.0
ubuntu% ./configure
ubuntu% make


cache.h:9:18: error: zlib.h: No such file or directory
fast-import.c:278: error: ‘Z_DEFAULT_COMPRESSION’ undeclared here (not in a function)
fast-import.c: In function ‘store_object’:
fast-import.c:1037: error: ‘z_stream’ undeclared (first use in this function)
fast-import.c:1037: error: (Each undeclared identifier is reported only once
fast-import.c:1037: error: for each function it appears in.)
fast-import.c:1037: error: expected ‘;’ before ‘s’
fast-import.c:1073: error: ‘s’ undeclared (first use in this function)
fast-import.c:1084: error: ‘Z_FINISH’ undeclared (first use in this function)
fast-import.c:1084: error: ‘Z_OK’ undeclared (first use in this function)
fast-import.c: In function ‘validate_raw_date’:
fast-import.c:1749: warning: ignoring return value of ‘strtoul’, declared with attribute warn_unused_result
fast-import.c:1758: warning: ignoring return value of ‘strtoul’, declared with attribute warn_unused_result
fast-import.c: In function ‘parse_progress’:
fast-import.c:2329: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result
fast-import.c: In function ‘git_pack_config’:
fast-import.c:2382: error: ‘Z_BEST_COMPRESSION’ undeclared (first use in this function)
make: *** [fast-import.o] Error 1

2.sudo yum install
3. sudo apt-get build-dep git-core git
4.sudo make;make install

标签:

git

subversion に代わる新しいソース管理システムということで git が注目されているようだ。
» Git - Fast Version Control System
subversion と大きく違うところは、分散されたレポジトリがローカルマシンに置かれている点。これは、ネットにつながっていなくてもソースをコミットできるということで、最近は電車のなかでもコードを書いたりする僕にはうってつけ。
マニュアルチュートリアルは充実しているのだが、僕はとりあえず最初にツールを触ってみて、ざっと全体像をつかみ、それから細部を調べたい質なので、もっとてっとり早く体験できるガイドを探したところ、あまり適切なものが見つからなかった。
そこで、レポジトリを作り、それをリモートにあるサーバーに置いたあと、subversion で言えば svn commit や svn update などにあたるコマンドを叩いて、2人以上の開発者でソースを共有するというシナリオで git を試してみた模様を自分でまとめてみた。

1. 構成

実際に試した構成は以下の通り。
git.png
Windows 環境の Bill さんと Mac の Steve さんでソースを共有する。おおもとのレポジトリは契約している VPS の Ubuntu サーバーに置く。

2. git をインストール

まず、それぞれの環境に git をインストールする。git のソースは Index of /pub/software/scm/git より最新のものを取得する。
[Ubuntu]
ubuntu% cd /tmp
ubuntu% wget http://www.kernel.org/pub/software/scm/git/git-1.6.0.tar.gz
ubuntu% tar zxvf git-1.6.0.tar.gz
ubuntu% cd git-1.6.0
ubuntu% ./configure
ubuntu% make
ubuntu% sudo make install
[Mac]
mac% cd /tmp
mac% wget http://www.kernel.org/pub/software/scm/git/git-1.6.0.tar.gz
mac% tar zxvf git-1.6.0.tar.gz
mac% cd git-1.6.0
mac% ./configure
mac% make prefix=/usr/local all
mac% sudo make prefix=/usr/local install
[Windows]
Windows 環境の場合は、cygwin でインストールするのがてっとり早い。
cygwin の setup.exe を起動し、ダウンロードサイトは http://mirrors.kernel.org を選択したら、Devel カテゴリの下に git が見つかった。
チェックボックスを選択してインストールするだけ。

3. レポジトリを作成し、最初のコミットをおこなう

最初に Mac の Steve さんが開発に着手、最初のコードを書いてレポジトリにコミットすることにする。
まずレポジトリ(ローカルの)を作成します。
mac% cd ~
mac% mkdir myapp
mac% cd myapp
mac% git init
次に適当に firstfile というファイルを作成し、レポジトリに追加、コミットします。
mac% touch firstfile
mac% git add firstfile
mac% git commit -m ‘first commit’

4. サーバーにリモートレポジトリを作成

次に Ubuntu サーバーにログインし、リモートレポジトリを作成します。
ubuntu% mkdir /var/git/myapp.git
ubuntu% cd /var/git/myapp.git
ubuntu% git --bare init
[2008/08/29 追記]
git --bare init
の bare の前のハイフンは二つです。酒井さん指摘してくれてありがとうございます。
Mac に戻り、ローカルのリポジトリ(master)をリモートのリポジトリ(origin)にプッシュ、つまり反映させます。example.com はサーバーのドメイン名です。
mac% cd ~/myapp
mac% git remote add origin ssh://steve@example.com/var/git/myapp.git
mac% git push origin master (master を origin にプッシュするという意味)

5. Windows でチェックアウト

Windows の Bill さんがソースをチェックアウトします。
cygwin から
win% cd
win% git clone ssh://bill@example.com/var/git/myapp.git
すると、myapp というフォルダが作成され、その下に firstfile というファイルがあります。
steve さんと bill さんで共同開発できる準備が整いました。

6. コミットとアップデート作業の実際

では、ためしに bill さんがファイルを追加しコミットしたあと、steve さんのローカルの開発環境にその変更を反映させてみます。
Windows 上で新しいファイル secondfile を追加し、コミットします。
win% cd ~/myapp
win% touch secondfile
win% git add secondfile
win% git commit -m ’second commit’
ここでコミットしたのはローカルのレポジトリ(master)に対してであって、まだ変更はリモートのレポジトリ(origin)に対しては反映されていません。
つまりここまでは Windows の bill さんはネットにつながっていなくてもできるわけです。
次にローカルのレポジトリの変更をリモートのレポジトリに反映させます。
win% git push origin master
この部分が subversion でいえば svn commit にあたるわけです。
mac では steve さんがリモートレポジトリにあった変更をローカルの開発環境に反映させます。
mac% cd ~/myapp
mac% git pull origin master
これが subversion でいえば、svn update にあたります。
bill さんがおこなった変更が反映され、myapp 以下に secondfile という新しいファイルができているはずです。
つまり、bill さんのおこなった変更は、順に
  1. bill さんの開発環境
  2. bill さんのローカルレポジトリ(master)
  3. ubuntu 上のリモートレポジトリ(origin)
  4. steve さんのローカルレポジトリ(master)
  5. steve さんの開発環境
という経路をたどって steve さんの環境に反映されたことになります。

7. まとめ

git を使って分散レポジトリを体験してみると、開発環境の変更を(ローカルの)レポジトリに反映させる部分が高速でおこなえるのが気持ちいいことがわかりました。
subversion だと、常にリモートのレポジトリに対しておこなわれるため、コミットに数秒〜十数秒かかります。わずかな時間ではあるのですが、開発が中断され、リズムが 損なわれてしまいます。git だとこの中断時間が一瞬なのでほとんど気にならないように思えます。(まだ本格的に git を使って開発を始めたわけではないのであくまでもそういう印象を持ったということですが。。)
あと、各フォルダの下に .svn フォルダが作られないというのもわずらわしくなくていいかも、です。
git をこれから積極的に使っていきたいという気になりました。
以下、参考にしたサイトです。
» Git - SVN Crash Course
» Compiling Git for Mac OS X Leopard (10.5)
» はじめてのgit | IDEA*IDEA
» Setting up a new remote git repository

标签:

[Ubuntu] Eclipse install

1)インストール
$ sudo unzip eclipse-SDK-3.0.2-linux-gtk.zip -d /opt
$ sudo chown -R root:root /opt/eclipse/

2)/usr/bin/eclipseファイルの設定
下記を記述する。
--
#!/bin/sh
export MOZILLA_FIVE_HOME="/usr/lib/mozilla/"
export ECLIPSE_HOME="/opt/eclipse"

$ECLIPSE_HOME/eclipse $*
--

3)最後の設定
$ sudo chmod +x /usr/bin/eclipse -->

标签:

2009-09-04

Android SDCard Filesystem

android的在s3c2440的移植,编译过程清参照熊猫哥哥的大作《s3c2410/2440(armv4t) 移植教程》。本文所讲述的是将android的根目录置于sd卡上。

1. linux kernel部分
1)sd card支持
make menuconfig
选择 Device Drivers ---> 进入
选择 <*> MMC/SD card support ---> 进入
选择如下:
│ --- MMC/SD card support │ │
│ │ [*] MMC debugging │ │
│ │ [*] Allow unsafe resume (DANGEROUS) │ │
│ │ *** MMC/SD Card Drivers *** │ │
│ │ <*> MMC block device driver │ │
│ │ [*] Use bounce buffer for simple hosts │ │
│ │ [*] Check card status on resume
│ │ < > SDIO UART/GPS class support │ │
│ │ < > MMC host test driver │ │
│ │ *** MMC/SD Host Controller Drivers *** │ │
│ │ < > Secure Digital Host Controller Interface support │ │
│ │ < > MMC/SD over SPI │ │
│ │ <*> Samsung S3C SD/MMC Card Interface support
2)ext2文件系统支持(android启动不支持vfat)
make menuconfig
选择 File systems ---> 进入
│ │ <*> Second extended fs support │ │
│ │ [*] Ext2 extended attributes │ │
│ │ [*] Ext2 POSIX Access Control Lists │ │
│ │ [*] Ext2 Security Labels │ │
│ │ [*] Ext2 execute in place support │ │
│ │ <*> Ext3 journalling file system support │ │
│ │ [*] Ext3 extended attributes │ │
│ │ [*] Ext3 POSIX Access Control Lists │ │
│ │ [*] Ext3 Security Labels

2. sd card部分
1)格式化成ext2/ext3文件系统
输入命令sudo mkfs.ext2 /dev/sdxxxx
注:/dev/sdxxxx是sd卡在pc上的节点,具体的查看方式为在读卡器查到pc上之前与之后分别输入cat /proc/partitions命令(这个命令是查看系统中有那些分区的),看看多了哪一个就是哪一个。另外,在执行mkfs.ext2命令之前请将 sd卡umount掉(umount /dev/sdxxxx)
2)准备文件
data与system以及init.rc的修改跟熊猫哥哥的文档里面准备nfs时做得修改完全一样。弄好后将其cp到sd卡上(先mount再cp)

3. 开发板部分
1) 下载kernel
2) 设置bootargs: setenv bootargs console=ttySAC0,115200 mem=64M root=/dev/mmcblk0 init=/init ip=192.168.0.110:192.168.0.104:192.168.0.1:255.255.255.0::eth0:off
注:如果你的sd卡在班子上的节点不是/dev/mmcblk0的话,请自行修改,这个可以在linux启动log里面看到。后面的ip设置是我自己加的,不喜勿入,呵呵
3) 设置bootdelay为3,据说是sd卡初始化比较慢,似乎这个还没出现过问题。不过还是要提示下为好


原文地址 http://blog.csdn.net/opendroid/archive/2009/03/02/3951035.aspx

标签:

Android编译

如果选择比较新的Linux版本(例如Fedora 10),则编译Android将比较顺利,一般直接make就可以成功生成所需要的文件和系统内核。(最多需要安装gperf), 但在比较旧的Linux内核上编译Android将遇到很多错误,本文以Fedora Core 5为例讲解所安装的步骤,供大家参考。

1. 因为Android SDK需要JDK 5或JDK 6支持, 但是Fedora Core 5的默认Java版本为JDK 4 (1.4.2), 不能满足需求,因此首先需要升级JAVA.

从如下地址可以得到最新的JDK

http://java.sun.com/javase/downloads/index.jsp

将下载的jdk-6u11-linux-i586.bin文件用chmod +x 设为执行,执行该文件将会自动解开为jdk1.6.0_11子目录,将该目录复制到合适的位置(例如/usr), 然后需要在启动文件中修改默认的JAVA主目录。

下面的修改以/usr目录做为存放路径

修改/etc/bashrc, 增加下面的内容

export JAVA_HOME=/usr/jdk1.6.0_11
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

这样重新启动后,相应配置将激活,运行 java -version将出现下面提示:

[root@Neil java]# java -version
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
[root@Neil java]#

说明java已经成功被安装了


2. 安装gperf

如果本机不存在gperf时,需要安装gperf. (Fedora 10下也有可能需要该文件)

yum install gperf

安装完成后,运行gperf --help将会有提示信息显示


3.安装repo

然后再执行:

repo init -u git://android.git.kernel.org/platform/manifest.git
应该就可以了。

repo sync
4. make

如果顺利的话,将在out目录下产生出我们所需要的SDK和相关的Kernel文件了。

Generated: (out/target/product/generic/android-info.txt)
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
[root@Neil mydroid]


5.运行普通的虚拟器emulator
emulator的路径是/home/xieyan/bin/mydroid/out/host/linux-x86/bin/emulator
$ . build/envsetup.sh
$ partner_setup
$ emulator

指定img运行
$ export ANDROID_PRODUCT_OUT=/home/xieyan/bin/mydroid/out/target/product/generic

$ emulator -image system.img -data userdata.img -ramdisk ramdisk.img

Android 主画面:

标签:

创建android文件系统(Root file system)

上网查了一些资料,自己做了个android 文件系统(root file system). 和大家分享一下。


如何创建android的file system,这里介绍两种方法。

第一种就是通过build android source得到,source build结束之后,会产生大部分的android文件系统,位置在你的android source build目录下的out/target/product/generic/。其中root/就是你的root fs, 你需要将system/拷贝到root/system下,这样root/就是你得到的一个基本的文件系统。但是,现在root/dev下面是空的,所以,我们需要创建所需要的device, 你可以到系统 /dev下, 把所有的device打一个包,拷贝到 dev下面(最省事的做法);或者使用mknod来自己建所需要的device。


第二种方法,是通过android镜像文件来得到文件系统。


android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中,是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数 据,emulator加载这3个映像文件后,会把和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。 ramdisk.img system

所以,可以通过下面的方法来建立我们自己的文件系统:


1. 从android SDK的SDK/ platforms/android-1.5/images下面得到Ramdisk.img


2. 解开 ramdisk.img


$ mv ramdisk.img ramdisk.cpio.gz

$ gzip -d ramdisk.cpio.gz

$ mkdir rootfs

$ cd tmp

$ cpio -i -F ../ramdisk.cpio


*** 此时 rootfs 目录下的就是 ramdisk.img 的文件和目录了,也就是你的root file system根目录了。

3. 启动android模拟器,从模拟器里面取出data/ 和 system/两个文件夹。具体方法可以参考这里

4. 将这两个文件夹拷贝到rootfs里面,覆盖掉里面相应的那两个同名文件夹。


5. 最后一步,同第一种方法一样,创建dev/,这里不再赘述。




原创文章,转载请注明出处:http://yishuihe.cublog.cn

标签:

Android开发系列(2)

这是更加android开发文档,写的我的第一个Android开发项目,就是在屏幕上显示一个简单的Hello World。
首先介绍几个概念:
AVD,AVD的全称为:Android Virtual Device,就是Android运行的虚拟设备,他是Android的模拟器识别,然后运行我们写的Android程序。我们建立的Android要运行,必须创建我们自己的AVD,每个AVD上可以配置很多的运行项目。创建AVD的方法又两种。一是通过Elcipse开发环境,二是通过命令行创建。
Eclipse开发环境创建:
选择Elcipse菜单中Windows菜单下的Android AVD Manager,弹出以下窗体:

在name中输入AVD的名称,Target中选择我们使用的类库(Android 1.1、Android1.5或者Google APIs 1.5),创建SDCard和皮肤,点击Finish按钮就可以了。
命令行创建:
在命令行方式中找到Tools的路径,输入命令:android create avd --target 2 --name my_avd
其中android是命令,后面是参数,Create avd是创建AVD,target 2是等级,name是Avd的名称。
创建第一个Android开发项目:
1、选择File->New->Project中选择Android Project,界面如下:

2、点击下一步,进入界面如下:

3、输入以下内容:对于其中输入的内容解释如下:
Project Name:Eclipse项目的名称。
Application Name:这个是应用程序的名称,他将显示在Android设备上的程序名称。
Package Name:这个是Java包的名空间。
Create Activity:这个名称将调用Android的插件,在插件中生成一个继承Android's Activity class的子类。
4、建立好的目录为:

其中:SRC是源文件,是程序员开发的源文件:中间他给我们产生了一个Helloworld.java的文件,文件的代码如下:
package com.example.helloandroid;


import android.app.Activity;
import android.os.Bundle;




public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
这个是Android的插件自动生成的,他就是继承了Activity 类,这个类是android运行的一个类,简单的说就是一个界面。
gen文件夹下的内容是自动产生的,不建议手工去修改这个里面的内容。
res文件夹下放置的是android使用的资源,其中drawable是图片,也就是在Android Devices中显示的程序的图标。layout中是布局,其中TextView就是其中的配置。values中放置的是资源。
另外就是一下自动生成的文件,还没有完全的明白,暂时不再赘述。
5、修改HelloAndroid中的代码:
修改为:
package com.android.helloandroid;


import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;



public class HelloAndroid extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

TextView tv = new TextView(this);

tv.setText("Hello, Android");

setContentView(tv);

}

}


运行结果的界面如下:



原文:http://blog.chinaunix.net/u3/92408/showart_2030101.html

标签:

Android开发系列(1)

Android是Google的一款手机操作系统,现在提供了Android的手机开发包(Android的SDK),如今发布了android-sdk-windows-1.5_r3,是Android Windows开发包1.5的第三个发布版本。
android-sdk-windows-1.5_r3的下载地址为:android-sdk-windows-1.5_r3.zip
下载完后,解压文件得到

其中:android的SDK提供了两个平台:android1.1和Android1.5,还有提供了强大的帮助文档、Usb_Driver(用来提供Android的外置开发环境)
Tools文件夹中提供了Android开发的一系列工具:不如Android的模拟器emulator.exe,android的各种命令,和使用的各种数据库开发。
1、下载Android SDK(现有版本为1.5r3)
下载地址为:android-sdk-windows-1.5_r3.zip
2、下载Elcipse
下载地址为:http://www.eclipse.org/downloads/
3、安装Android SDK
下载完的Android SDK是一个ZIP压缩包,解压后放置在任何位置都是可以的,但是主要是配置Android SDK在系统中的配置路径,也就是要设置Windows系统的环境变量:
右键点击我的电脑,选择属性,在高级选项卡中选择环境变量,要在系统变量的Path中添加Android SDK/Tools的完整路径到Path的环境变量中,例如我的Android SDK的路径为D:\android-sdk-windows-1.5_r3\tools
如图:

4、安装ADT(Android Development Tools)
a、打开Eclipse,选择Help->Software Updates
b、选择Available Software
c、添加Add Site..,输入网址:https://dl-ssl.google.com/android/eclipse/或者http://dl-ssl.google.com/android/eclipse/
d、返回到Available Software界面,选择新添加的网站,选中Android DDMS和Android Development Tools,选中安装
e、完成,重启Eclipse。
5、修改Eclipse preferences中的路径
a) 选中Window > Preferences...
b) 选中Android,如我的就是D:\android-sdk-windows-1.5_r3

c) 修改SDK的路径

d) 完成

6、建立一个测试项目,运行测试。




原文:http://blog.chinaunix.net/u3/92408/showart_2030101.html

标签:

基于2.6.29内核的x86平台Android编译过程

注:此文是在patch-hosting-for-android-x86-support项目的基础上,将内核版本改为2.6.29而来
patch-hosting-for-android-x86-support项目主页:http://code.google.com/p/patch-hosting-for-android-x86-support/

主要步骤
按照patch-hosting-for-android-x86-support的Wiki页面中的BuildAndroidForX86Platform中说明步骤,先利用repo得到完整的android源码以及eee_701平台相关的编译脚本,但先不要开始编译。
利用git获得android的2.6.29版内核。执行
#git clone git://android.git.kernel.org/kernel/common.git android-kernel-2.6.29
建立本地的代码仓库。完成后,进入android-kernel-2.6.29目录,执行
#git checkout origin/android-2.6.29 -b android-kernel-2.6.29
,签出我们需要的内核源码
为内核打补丁。从patch-hosting-for-android-x86-support的下载页下载alarm.patch,在内核目录执行
#patch -Np1 < alarm.patch
打上补丁
配置并编译2.6.29内核。从patch-hosting-for-android-x86-support项目的下载页下到kernel.config文件,放到刚刚获得的2.6.29版内核根目录,并重命名为.config。然后执行make menuconfig。这里主要需要打开android的staging driver功能。打开device drivers->staging drivers,然后关闭device drivers->Exclude Staging drivers from being built,这时最底下会出现Android菜单,进去把所有都选上(有些可能不需要,根据具体需要配置)。然后保存退出。进行编译
#make bzImage -j4
如果编译顺利,将arch/x86/boot/bzImage复制到前面获得的android源码目录中vendor/asus/eee_701/目录,并改名为kernel(覆盖原有的kernel文件)
剩下步骤与patch-hosting-for-android-x86-support的Wiki说明相同,最后可以做出一个vdi镜像用virtualbox跑跑试试。bless~
原文:http://blog.chinaunix.net/u3/92408/showart_2030101.html

标签:

gdb在android中的使用

gdb在android开发中的使用相信很多开发人员都很想掌握,今天我们就用gdb在Android Emulator中进行调试,让大家学习gdb调试。在Android手机开发平台的emulator里,有两种方式可以做Gdb调试:直接使用GdbServer或利用Gdb调试进行调试。
  1、利用Gdb Server进行调试:
  A、从下面的链接中下载针对Android的Gdb Server http://www.billrocks.org/android_libs/bin/
  B、把下载的Gdb Server安装到你的emulator 中
  1)、 启动emulator
  2)、下载Gdb Server到你的emulator
  打开一个终端,运行:
$ adb shell
#cd data
#mkdir bin
  在另外一个终端里运行:
$ adb push gdbserver /data/bin
  这样通过Android自己的adb,把gdbserver 下载到emulator 中了。
  C、运行gdbserver :
# /data/bin/gdbserver 10.0.2.2:1234 [args...]
  D、回到另一终端,映射端口:
$telnet localhost 5554
telnet到emulator 中,运行下面的命令:
redir add tcp:1234:1234
  E、在第三个终端中运行 gdb:
$gdb test
test 是你要调试的程序,然后在gdb命令行运行:
(gdb) target remote localhost:1234
然后你就可以像以前用gdb那样进行程序调试了。
  2、直接用本地Gdb进行调试
  A、从下面的链接中下载Android调试包,它是用Android的toolchain编译好的二进制文件:
http://ortegaalfredo.googlepages.com/android-debug.tbz
  B、解压调试包,然后把gdb下载到你的emulator 中,当然如果你有真的手机,也可以这样调试:
$adb push gdb /data/bin
  C、利用adb连接到emulator
$adb shell
  运行gdb,会出现下面的信息:
# /data/bin/gdb
dlopen failed on 'libthread_db.so.1' - libthread_db.so.1: cannot open shared object file: No such file or directory
GDB will not be able to debug pthreads.
GNU gdb 6.7
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=arm-none-linux-gnueabi --target=".
(gdb)
  D、 然后你就可以像以前用gdb那样对程序进行调试了。
原文:http://blog.chinaunix.net/u3/92408/showart_2030101.html

标签:

android的emulator打电话发信息

在android提供的emulator中,包含了一个gsm modem,可以模拟拨入电话以及短信,步骤如下
1)启动模拟器,可以通过eclipse或者命令行启动
2)连接控制台
命令是:telnet localhost
ports是模拟器的端口,一般在title可以看到,如我的是android emulator(5554),则端口是5554,命令就是:
telnet localhost 5554
3)发送gsm 命令
比如输入
gsm call 13666668888
表示模拟来自13666668888的电话
具体的命令可以通过命令
gsm ?获取帮助
4)发送短信
发送命令
sms send
可以模拟来自phonenumber的短信,短信内容是textmessage
同样,你可以通过sms ?获取帮助

标签:

android sdk 1.5 安装与配置

1.下载android sdk
下载地址如下:
http://dl.google.com/android/android-sdk-windows-1.5_r2.zip
http://dl.google.com/android/android-sdk-linux_x86-1.5_r2.zip
2.下载eclipse 3.4.2
按官方文档说,android sdk 可以运行在eclipse 3.3以上的IDE中,ubuntu源中的eclipse版本过低,建议使用eclipse 3.4.2,其下载地址为:
http://download.actuatechina.com/eclipse/eclipse/downloads/drops/R-3.4.2-200902111700/eclipse-SDK-3.4.2-linux-gtk.tar.gz
3.安装eclipse 3.4.2
先将eclipse解压:
$tar xzvf eclipse-SDK-3.4.2-linux-gtk.tar.gz
将解压出的eclipse文件夹移动到目标目录中去,在这里我设定的安装目标为:/usr/local下。
$sudo mv eclipse /usr/local/
4.安装android sdk
解压android sdk包:
$unzip android-sdk-linux_x86-1.5_r2.zip
移动到目标目录:<在这里我将解压出的sdk文件夹目录改成了android-sdk>
$mv android-sdk-linux_x86-1.5_r2 android-sdk
$sudo mv android-sdk /usr/local/
5.配置环境变量:
修改~/.bashrc文件,加入android sdk与eclipse的环境变量。
$vi ~/.bashrc
在文件的最后加入
export PATH=/usr/local/android-sdk/tools:/usr/local/eclipse:$PATH
保存并退出vi
使配置信息生效
$source ~/.bashrc
6.android avd配置信息的生成
android avd的创建格式为:android create avd -n your-avd-name -t your-targets
其中:-n的参数为我们要创建的avd的名字;-t的参数为Available Android targets的id,我们可以使用命令:android list查寻其具体信息。
$android list

Available Android targets:
id: 1
Name: Android 1.1
Type: Platform
API level: 2
Skins: HVGA-P, HVGA (default), QVGA-P, HVGA-L, QVGA-L
id: 2
Name: Android 1.5
Type: Platform
API level: 3
Skins: HVGA-P, HVGA (default), QVGA-P, HVGA-L, QVGA-L
id: 3
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Description: Android + Google APIs
Based on Android 1.5 (API level 3)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: QVGA-P, HVGA-L, HVGA (default), QVGA-L, HVGA-P
Available Android Virtual Devices:

下面我们就以创建一个android 1.5的avd为例:

$android create avd -n android-sdk-15 -t 2

Android 1.5 is a basic Android platform.
Do you wish to create a custom hardware profile [no]yes

Device ram size: The amount of physical RAM on the device, in megabytes.
hw.ramSize [96]:128

Touch-screen support: Whether there is a touch screen or not on the device.
hw.touchScreen [yes]:yes

Track-ball support: Whether there is a trackball on the device.
hw.trackBall [yes]:yes

Keyboard support: Whether the device has a QWERTY keyboard.
hw.keyboard [yes]:yes

DPad support: Whether the device has DPad keys
hw.dPad [yes]:yes

GSM modem support: Whether there is a GSM modem in the device.
hw.gsmModem [yes]:yes

Camera support: Whether the device has a camera.
hw.camera [no]:

Camera support: Whether the device has a camera.
hw.camera [no]:yes

Maximum horizontal camera pixels
hw.camera.maxHorizontalPixels [640]:854

Maximum vertical camera pixels
hw.camera.maxVerticalPixels [480]:480

GPS support: Whether there is a GPS in the device.
hw.gps [yes]:yes

Battery support: Whether the device can run on a battery.
hw.battery [yes]:yes

Accelerometer: Whether there is an accelerometer in the device.
hw.accelerometer [yes]:yes

Audio recording support: Whether the device can record audio
hw.audioInput [yes]:yes

Audio playback support: Whether the device can play audio
hw.audioOutput [yes]:yes

SD Card support: Whether the device supports insertion/removal of virtual SD Cards.
hw.sdCard [yes]:yes

Cache partition support: Whether we use a /cache partition on the device.
disk.cachePartition [yes]:yes

Cache partition size
disk.cachePartition.size [66MB]:100MB

Created AVD ''android-sdk-15'' based on Android 1.5

这样我们就创建了一个基于1.5的avd,上面的具体意思我想大家都能看懂,就不多说了。下在我们就可以测试一下android emulator了:

$emulator @android-sdk-15 -show-kernel

这样就可以启动android emulator了:

加入参数-show-kernel是为了在终端上打印android kernel的信息。




下面我们配置eclipse,使之支持android sdk:

打开Eclipse,Help->Software Updates->Available Software,点击
Add site,输入
http://dl-ssl.google.com/android/eclipse/

然后安装。完成后就可以开始在eclipse上建立android应用程序了。
原文:http://blog.chinaunix.net/u3/92408/showart_2030101.html

标签:

Android G1的nand分区情况

今天研究了一下Android G1的nand分区情况。
由于底层研发的习惯,我先看了看文件系统在Nand Flash中的分布情况:
我在Ubuntu下使用adb连接了G1,然后:
# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00020000 "misc"
mtd1: 00500000 00020000 "recovery"
mtd2: 00280000 00020000 "boot"
mtd3: 05a00000 00020000 "system"
mtd4: 01e00000 00020000 "cache"
mtd5: 059c0000 00020000 "userdata"
mtd6: 10000000 00020000 "msm_nand"
从中可知:

misc :0.25MB:是存放开机画面的分区,也就是开机时看到的那个白色的大G1字样(默认为白色"T-mobile G1")
recovery :5MB:是G1的恢复模式镜像区(即开机按Home+End进入的界面)
Boot :2.5MB:Linux操作系统内核和ramdisk镜像一起打包后存放的分区
system :90MB:是system.img存放的分区,启动后此镜像挂载在根目录下的system文件夹中。
cache :30MB:是缓存临时文件夹,挂载为/cache目录,据说是除了T-mobile的OTA更新外,别无用处。
userdata :89.75MB:用户安装的软件以及各种数据,挂载为/data目录
msm_nand :256MB:代表整个Nand Flash,不是一个分区。但是所有的分区加起来才217.5MB,小于256MB,说明还有剩余的flash空间。(此分区在大部分机上不存在,不影响使用)

G1所使用的Nand Flash是K5E2G1GACM,但是在三星的网上居然没找到Datasheet,网上也没有google到!

模拟器中的输出是这样的:
# cat /proc/mtd
dev: size erasesize name
mtd0: 04000000 00020000 "system"
mtd1: 04000000 00020000 "userdata"
mtd2: 06100000 00020000 "cache"


补黑色台版的G2分区 :
# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00020000 "misc"
mtd1: 00500000 00020000 "recovery"
mtd2: 00280000 00020000 "boot"
mtd3: 05a00000 00020000 "system"
mtd4: 05000000 00020000 "cache"
mtd5: 127c0000 00020000 "userdata"
可以看到 cache 和 userdata变大了,因为 G2的ROM 为512MB的。
从上面的数据我么可以发现一个现象:无论是G1还是G2,所有的分区加起来都比整个Nandflash小38.5MB,这些空间应该另有他用,其中有一个用处就是存放bootloader。但是从以往的经验来看,bootloader不可能有38.5MB,肯定另有用处,可能用于虚拟内存(猜测)。


原文地址 http://www.hiapk.com/bbs/thread-6383-1-1.html

标签:

Android内核的简单分析

Android内核的简单分析
NeilWong (neilwong@hotmail.com)

Google的Android操作系统已经成功面市,因为Android操作系统是基于Linux-2.6.25内核的,并且目前所有的源代码也都全部开放,因此可以简单地加以分析以方便以后向其他平台的移植工作.

首先需要了解的就是Android的一些基本情况,并下载Android的源代码以方便分析.

Android的官方站点:

http://www.android.com/

Android Source 的官方安装方法:

http://source.android.com/download



Android的中文站点:

http://www.androidin.com/


源代码包的相应联结地址:

http://www.androidin.com/bbs/viewthread.php?tid=2337



我们可以采用Android官方站点推荐方式来下载Android的源代码,也可以从Android中文站点直接下载源代码程序包,随后再更新和同步.

当采用Android官方推荐方式下载或者需要更新你的源代码时,都需要git工具支持, 当你的系统没有安装git或者git版本过低时,建议从下面的地址更新到最新的git包.(Android要求git版本必须大于1.5.4)

http://git.or.cz/

给git自动升级的方式:

git clone git://git.kernel.org/pub/scm/git/git.git


如果采用下载源代码包的方式,下载并展开后,在 .repo/repo 目录下有同步执行的文件repo, 你可以将其拷贝到你的PATH所在路径以备使用,例如/usr/bin等等. 或者也可以从Android站点得到最新的repo文件并复制到PATH所在路径.

wget http://android.git.kernel.org/repo

源代码包解开后,其主目录下存在repo_sync.sh文件, 其主要是执行repo sync以实现和Android站点同步代码包的目的, 当执行出错后将再一次运行repo sync命令直到同步正常结束,但原文件包含错误,建议改成下面的程序:(原文件中少了一个空格)

#!/bin/bash
echo "============start repo sync================="
repo sync
while [ $? = 1 ]; do
echo "============sync failed, re-sync again ====="
sleep 3
repo sync
done



这样, 运行sh repo_sync.sh就可以自动实现本地代码包的同步和更新动作了.

我在Fedora Core 6上经过同步之后, du -h ./mydroid, 占用空间大约是2.1G


以下为Android官方公布的架构图:



在kernel子目录下存放的就是Android的Linux Kernel了, 通过和标准的Linux 2.6.25 Kernel的对比,我们可以发现,其主要增加了以下的内容:



1. 基于ARM架构增加Gold-Fish平台,相应增加的目录如下:

kernel/arch/arm/mach-goldfish

kernel/include/asm-arm/arch-goldfish





目前Google的基于Gold-Fish的手机为G1手机,明年G2手机将面世。

该手机采用QualComm公司的高性能处理芯片MSM7201A,该芯片以ARM 11作为Application应用处理器,以ARM926T作为BaseBand主处理器(主要承载GSM/GPRS/EDGE/3G等协议栈处理),支持JAVA硬加速(ARM本身也自带JAVA硬件处理),包含GPS Processor, 支持2D/3D图形加速(每秒可处理4百万个多边形),另外还支持最大800万像素的Sensor, 支持MPEG 4/H.263/H.264/Real Media等多种Codec。

其中ARM926T采用的主频为274M HZ, ARM11的主频为528MHZ. (MSM7200的ARM11的主频为400M HZ)

因为没有找到MSM7201A的详细DataSheet, 因此可以简单地参考MSM7200的规格:


MSM7200_DataSheet.pdf



下面为MSM7200架构图:

2. 增加了yaffs2 FLASH文件系统,相应增加的目录为:

kernel/fs/yaffs2

实际上,Android包经过编译后生成的system.img和ramdisk.img文件就是yaffs2格式的包.


3. 增加了Android的相关Driver,相应目录为:

kernel/drivers/android



主要分为:

Android IPC系统: Binder (binder.c)

Android 日志系统: Logger (logger.c)


Android 电源管理: Power (power.c)


Android 闹钟管理: Alarm (alarm.c)

Android 内存控制台: Ram_console (ram_console.c)


Android 时钟控制的gpio: Timed_gpio (timed_gpio.c)


4. 增加了switch处理, 相应的目录为:

kernel/drivers/switch/


5. 增加了一种新的共享内存处理方式, 相应增加的文件为:

kernel/mm/ashmem.c


6. 其他为Linux-2.6.25内核所做的补丁等等,例如BlueTooth, 在此不做详细分析







另外GoldFish平台相关的驱动文件如下:

1. 字符输出设备:

kernel/drivers/char/goldfish_tty.c

2. 图象显示设备: (Frame Buffer)

kernel/drivers/video/goldfishfb.c

3. 键盘输入设备:

kernel/drivers/input/keyboard/goldfish_events.c

4. RTC设备: (Real Time Clock)

kernel/drivers/rtc/rtc-goldfish.c

5. USB Device设备:

kernel/drivers/usb/gadget/android_adb.c

6. SD卡设备:

kernel/drivers/mmc/host/goldfish.c

7. FLASH设备:

kernel/drivers/mtd/devices/goldfish_nand.c

kernel/drivers/mtd/devices/goldfish_nand_reg.h

8. LED设备:

kernel/drivers/leds/ledtrig-sleep.c

9. 电源设备:

kernel/drivers/power/goldfish_battery.c

10. 音频设备:

kernel/arch/arm/mach-goldfish/audio.c

11. 电源管理:

kernel/arch/arm/mach-goldfish/pm.c

12. 时钟管理:

kernel/arch/arm/mach-goldfish/timer.c



下面的链接为Android Kernel和标准Linux-2.6.25包相比较所产生的PATCH包, 其中比较小的other patch包是除了上面列出的增加文件之外所修改的文件细节,供大家参考。

http://blogimg.chinaunix.net/blog/upfile2/090102095410.gz


以下为Android内核启动信息:

Uncompressing Linux.................................................................................... done, booting the kernel.
emulator: emulator window was out of view and was recentred

Linux version 2.6.25-00350-g40fff9a (android-build@apa27.mtv.corp.google.com) (gcc version 4.2.1) #1 Wed Jul 23 18:10:44 PDT 2008
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00003137
Machine: Goldfish
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-through cache
CPU0: I cache: 4096 bytes, associativity 4, 32 byte lines, 32 sets
CPU0: D cache: 65536 bytes, associativity 4, 32 byte lines, 512 sets
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 24384
Kernel command line: qemu=1 console=ttyS0 android.checkjni=1 android.qemud=ttyS1 android.ndns=2
Unknown boot option `android.checkjni=1': ignoring
Unknown boot option `android.qemud=ttyS1': ignoring
Unknown boot option `android.ndns=2': ignoring
PID hash table entries: 512 (order: 9, 2048 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 96MB = 96MB total
Memory: 94268KB available (2380K code, 445K data, 100K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 152 bytes
android_power_init
android_power_init done
NET: Registered protocol family 16
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
checking if image is initramfs... it is
Freeing initrd memory: 136K
goldfish_new_pdev goldfish_interrupt_controller at ff000000 irq -1
goldfish_new_pdev goldfish_device_bus at ff001000 irq 1
goldfish_new_pdev goldfish_timer at ff003000 irq 3
goldfish_new_pdev goldfish_rtc at ff010000 irq 10
goldfish_new_pdev goldfish_tty at ff002000 irq 4
goldfish_new_pdev goldfish_tty at ff011000 irq 11
goldfish_new_pdev smc91x at ff012000 irq 12
goldfish_new_pdev goldfish_fb at ff013000 irq 13
goldfish_new_pdev goldfish_audio at ff004000 irq 14
goldfish_new_pdev goldfish_memlog at ff006000 irq -1
goldfish_new_pdev goldfish-battery at ff014000 irq 15
goldfish_new_pdev goldfish_events at ff015000 irq 16
goldfish_new_pdev goldfish_nand at ff016000 irq -1
goldfish_new_pdev goldfish-switch at ff017000 irq 17
goldfish_new_pdev goldfish-switch at ff018000 irq 18
goldfish_pdev_worker registered goldfish-switch
goldfish_pdev_worker registered goldfish-switch
goldfish_pdev_worker registered goldfish_nand
goldfish_pdev_worker registered goldfish_events
goldfish_pdev_worker registered goldfish-battery
goldfish_pdev_worker registered goldfish_memlog
goldfish_audio_probe
goldfish_pdev_worker registered goldfish_audio
goldfish_pdev_worker registered goldfish_fb
goldfish_pdev_worker registered smc91x
goldfish_pdev_worker registered goldfish_tty
goldfish_pdev_worker registered goldfish_tty
goldfish_pdev_worker registered goldfish_rtc
goldfish_pdev_worker registered goldfish_timer
goldfish_pdev_worker registered goldfish_device_bus
goldfish_pdev_worker registered goldfish_interrupt_controller
ashmem: initialized
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
yaffs Jul 23 2008 18:10:35 Installing.
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
allocating frame buffer 320 * 480, got ffc10000
Console: switching to colour frame buffer device 40x30
console [ttyS0] enabled
brd: module loaded
loop: module loaded
nbd: registered device at major 43
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre
No IRQF_TRIGGER set_type function for IRQ 12 (goldfish)
eth0: SMC91C11xFD (rev 1) at c6800000 IRQ 12 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
goldfish nand dev0: size 4000000, page 2048, extra 64, erase 131072
goldfish nand dev1: size 4000000, page 2048, extra 64, erase 131072
goldfish nand dev2: size 4000000, page 2048, extra 64, erase 131072
mice: PS/2 mouse device common for all mice
*** events probe ***
events_probe() addr=0xc6804000 irq=16
events_probe() keymap=qwerty2
input: qwerty2 as /class/input/input0
goldfish_rtc goldfish_rtc: rtc core: registered goldfish_rtc as rtc0
logger: created 64K log 'log_main'
logger: created 64K log 'log_events'
logger: created 64K log 'log_radio'
IPv4 over IPv4 tunneling driver
GRE over IPv4 tunneling driver
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
802.1Q VLAN Support v1.8 Ben Greear
All bugs added by David S. Miller
VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0
goldfish_rtc goldfish_rtc: setting system clock to 2009-01-02 07:43:01 UTC (1230882181)
Freeing init memory: 100K
init: cannot open '/initlogo.rle'
yaffs: dev is 32505856 name is "mtdblock0"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.0, "mtdblock0"
yaffs: dev is 32505857 name is "mtdblock1"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.1, "mtdblock1"
yaffs: dev is 32505858 name is "mtdblock2"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.2, "mtdblock2"
sh: can't access tty; job control turned off
# init: cannot find '/system/bin/playmp3', disabling 'bootsound'
eth0: link up
warning: `rild' uses 32-bit capabilities (legacy support in use)
init: sys_prop: mis-match msg size recieved: -1 expected: 128

从启动信息可以看出,其主CPU为ARM926EJ-S,并非ARM11 CPU, 说明下载的Emulator内核并非是针对G1手机的,估计只是实现了对ARM926EJ-S CPU的模拟。

以上为Android内核的大致分析,希望能给有兴趣的人员以简单帮助。


原文地址 http://blog.chinaunix.net/u2/85263/showart_1729098.html

标签:

如何构建Android 1.5 Linux内核映像

和一般的Linux系统开发流程一样,Android平台开发的一个很重要的基础工作就是对其内核的编译和移植。本文的目的就在于构建出可以在Android自带的ARM QEMU模拟器上运行的内核映像,希望对于大家做内核的移植和系统构建有帮助。
请先参考我的另一篇文章如何取得Android源代码,确保正确地拿到了Android kernel/common项目的 Goldfish分支(该分支用于构建运行在emulator上的系统内核,而主线则是用于构建运行在实际设备上的内核代码)上的内核代码。另外,需要提醒一下大家的是Android的sourcecode目前只能在Linux或者Mac OS下做交叉编译编译,Windows并没有被支持,以下将以Ubuntu 8.04为Host OS来说明。


Android对Linux Kernel做了不少的改进,比如添加对yaffs2文件系统的支持,改进蓝牙的支持,改进电源管理机制,以及为模拟器版本添加的Goldfish平台等等,不过内核的编译方式和标准的kernel并没有区别。
这里唯一需要注意的是,Android 1.0_r2以后,整个项目的sourcecode就全部转移到git了,Google Code上不会再有更新,请确保从Git上拿到了android-goldfish-2.6.27分支上的内核代码。

1、在Host OS上准备编译环境
尽管很多人安装完Ubuntu后第一件事情就是装上build-essential,不过我在这里还是要提醒一下大家,另外做menuconfig的时候ncurses-devel库也是必须的。运行以下命令,一次搞定:
sudo apt-get install build-essential ncurses-dev

2、准备交叉编译工具链
Android代码树中有一个prebuilt项目,包含了我们编译内核所需的交叉编译工具,如果你拿了完整的Android 1.5代码树,它就会在prebuilt目录下。如果没有拿完整的代码树也没有关系,只要用Git clone一个或者到从GitWeb下载一个prebuilt项目,如果是从GitWeb下载的话记得解压缩就行。

3、设定环境变量
把刚才下载的prebuilt中的arm-eabi编译器加入$PATH
$export PATH=$PATH:/home/william/android-source/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin

设定目标arch为arm
$export ARCH=arm

4、设定交叉编译参数
打开kernel目录下的Makefile文件,把CROSS_COMPILE指向刚才下载的prebuilt中的arm-eabi编译器
CROSS_COMPILE ?= arm-eabi-


LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
$(call ld-option, -Wl$(comma)–build-id,))
这一行注释掉,并且添加一个空的LDFLAGS_BUILD_ID定义,如下:
LDFLAGS_BUILD_ID =
下面的这段解释来自陈罡的blog

把它注释掉的原因是目前android的内核还不支持这个选项。–build-id选项,主要是用于在生成的elf可执行文件中加入一个内置的id,这样在core dump,或者debuginfo的时候就可以很快定位这个模块是哪次build的时候弄出来的。这样就可以避免,每次都把整个文件做一遍效验,然后才能得到该文件的是由哪次build产生的。对于内核开发者来说,这是很不错的想法,可以节约定位模块版本和其影响的时间。目前,该功能还出于early stage的状态,未来的android或许会支持,但至少目前的版本是不支持的。
对这个–build-id选项感兴趣的朋友,可以访问下面的网址,它的作者已经解释得非常明白了:
http://fedoraproject.org/wiki/Releases/FeatureBuildId

5、从1.5_r1捆绑的SDK中获得内核配置文件
大家都知道,内核编译中有一步make menuconfig,用于配置kernel,这里我们可以先获取官方的配置,如果必要的话再作改动。先启动模拟器,然后通过adb pull命令(该命令用于从设备上复制文件到本地)即可完成。
$adb pull /proc/config.gz ~/
现在我们用gunzip把config.gz解开,把得到的config文件移动到kernel source所在的目录,然后重命名为.config即可。
$ gunzip config.gz
$ mv config ~/sources/goldfish-kernel/.config

6、开始编译
因为我们之前已经吧1.5_r1中的.config复制到了kernel目录下,如果需要修改配置,可以使用
make menuconfig
修改并保存配置,如果没有特殊需要的话就可以直接用
make
命令来编译内核了

7、测试生成的zImage
编译内核的过程应该很顺利,因为默认的配置对内核作了大幅的精简,大约5~6分钟就可以编译完成了,会在最终会在arch/arm/boot目录下面生成一个zImage,这个就是我们所要的运行在模拟器上的内核映像了。
下面我们就在模拟器中测试一下我们所生成的zImage。
emulator @1.5_L2 -kernel ./zImage
其中1.5_L2是我之前创建的AVD,如果想输出kernel log,请加上-show-kernel参数。

一切顺利的话,我们应该可以看到Android顺利启动了。



通过adb shell,我们可以查看version信息,如下图:



关于为实际设备编译kernel
如果要为一个实际的设备比如说G1重新编译内核映像,步骤和上述为一个运行在模拟器上的内核映像步骤基本一致,只是所需要的源代码应当来自主线而不是goldfish分支。另外,编译完成以后载入映像的方式也不同,需要通过USB将映像烧入nand flash。



原文地址 http://www.williamhua.com/2009/04/30/how-to-build-android-15-kernel-image/

标签:

分析Android 根文件系统启动过程(init守护进程分析)

在Android系统启动时,内核引导参数上一般都会设置“init=/init”, 这样的话,如果内核成功挂载了这个文件系统之后,首先运行的就是这个根目录下的init程序。这个程序所了什么呢? 我们只有RFSC(Read the Fucking Source code)!!
init程序源码在Android官方源码的system/core/init中,main在init.c里。我们的分析就从main开始。
init:
(1)安装SIGCHLD信号。(如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。因此需要对SIGCHLD信号做出处理,回收僵尸进程的资源,避免造成不必要的资源浪费。)
(2)对umask进行清零。
何为umask,请看http://www.szstudy.cn/showArticle/53978.shtml
(3)为rootfs建立必要的文件夹,并挂载适当的分区。
/dev (tmpfs)
/dev/pts (devpts)
/dev/socket
/proc (proc)
/sys (sysfs)
(4)创建/dev/null和/dev/kmsg节点。
(5)解析/init.rc,将所有服务和操作信息加入链表。
(6)从/proc/cmdline中提取信息内核启动参数,并保存到全局变量。
(7)先从上一步获得的全局变量中获取信息硬件信息和版本号,如果没有则从/proc/cpuinfo中提取,并保存到全局变量。
(8)根据硬件信息选择一个/init.(硬件).rc,并解析,将服务和操作信息加入链表。
在G1的ramdisk根目录下有两个/init.(硬件).rc:init.goldfish.rc和init.trout.rc,init程序会根据上一步获得的硬件信息选择一个解析。
(9)执行链表中带有“early-init”触发的的命令。
(10)遍历/sys文件夹,是内核产生设备添加事件(为了自动产生设备节点)。
(11)初始化属性系统,并导入初始化属性文件。
(12)从属性系统中得到ro.debuggable,若为1,則初始化keychord監聽。
(13)打開console,如果cmdline中沒有指定console則打開默認的/dev/console
(14)讀取/initlogo.rle(一張565 rle 壓縮的位圖),如果成功則在/dev/graphics/fb0顯示Logo,如果失敗則將/dev/tty0設為TEXT模式并打開/dev/tty0,輸出文本“ANDROID”字樣。
(15)判斷cmdline 中的參數,并设置属性系统中的参数:
1、 如果 bootmode為
- factory,設置ro.factorytest值為1
- factory2,設置ro.factorytest值為2
- 其他的設ro.factorytest值為0
2、如果有serialno参数,則設置ro.serialno,否則為""
3、如果有bootmod参数,則設置ro.bootmod,否則為"unknown"
4、如果有baseband参数,則設置ro.baseband,否則為"unknown"
5、如果有carrier参数,則設置ro.carrier,否則為"unknown"
6、如果有bootloader参数,則設置ro.bootloader,否則為"unknown"
7、通过全局变量(前面从/proc/cpuinfo中提取的)設置ro.hardware和ro.version。
(16)執行所有触发标识为init的action。
(17)開始property服務,讀取一些property文件,這一動作必須在前面那些ro.foo設置后做,以便/data/local.prop不能干預到他們。
- /system/build.prop
- /system/default.prop
- /data/local.prop
- 在讀取默認的property后讀取presistent propertie,在/data/property中
(18)為sigchld handler創建信號機制
(19)確認所有初始化工作完成:
device_fd(device init 完成)
property_set_fd(property server start 完成)
signal_recv_fd (信號機制建立)
(20) 執行所有触发标识为early-boot的action
(21) 執行所有触发标识为boot的action
(22)基于當前property狀態,執行所有触发标识为property的action
(23)注冊輪詢事件:
- device_fd
- property_set_fd
-signal_recv_fd
-如果有keychord,則注冊keychord_fd
(24)如果支持BOOTCHART,則初始化BOOTCHART
(25)進入主進程循環:
- 重置輪詢事件的接受狀態,revents為0
- 查詢action隊列,并执行。
- 重啟需要重啟的服务
- 輪詢注冊的事件
- 如果signal_recv_fd的revents為POLLIN,則得到一個信號,獲取并處理
- 如果device_fd的revents為POLLIN,調用handle_device_fd
- 如果property_fd的revents為POLLIN,調用handle_property_set_fd
- 如果keychord_fd的revents為POLLIN,調用handle_keychord
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tekkamanitachi/archive/2009/06/17/4277892.aspx

标签:

Android编译完成后的代码结构

Android编译完成后,将在根目录中生成一个out文件夹,所有生成的内容均放置在这个文件夹中。out文件夹如下所示:
out/
|-- CaseCheck.txt
|-- casecheck.txt
|-- host
| |-- common
| `-- linux-x86
`-- target
|-- common
`-- product

主要的两个目录为host和target,前者表示在主机(x86)生成的工具,后者表示目标机(模认为ARMv5)运行的内容。

host目录的结构如下所示:
out/host/
|-- common
| `-- obj(JAVA库)
`-- linux-x86
|-- bin(二进制程序)
|-- framework(JAVA库,*.jar文件)
|-- lib(共享库*.so)
`-- obj(中间生成的目标文件)
host目录是一些在主机上用的工具,有一些是二进制程序,有一些是JAVA的程序。

target目录的结构如下所示:
out/target/
|-- common
| |-- R (资源文件)
| |-- docs
| `-- obj (目标文件)
`-- product
`-- generic
其中common目录表示通用的内容,product中则是针对产品的内容。
在common目录的obj中,包含两个重要的目录:
APPS中包含了JAVA应用程序生成的目标,每个应用程序对应其中一个子目录,将结合每个应用程序的原始文件生成Android应用程序的APK包。
JAVA_LIBRARIES中包含了JAVA的库,每个库对应其中一个子目录。

在默认的情况下,Android编译将生成generic目录,如果选定产品还可以生成其他的目录。generic包含了以下内容:
out/target/product/generic/
|-- android-info.txt
|-- clean_steps.mk
|-- data
|-- obj
|-- ramdisk.img
|-- root
|-- symbols
|-- system
|-- system.img
|-- userdata-qemu.img
`-- userdata.img

在generic/obj/APPS目录中包含了各种JAVA应用,与common/APPS相对应,但是已经打成了APK包。
system目录是主要的文件系统,data目录是存放数据的文件系统。
obj/SHARED_LIBRARIES中存放所有动态库。
obj/STATIC_LIBRARIES中存放所有静态库。
几个以img为结尾的文件是几个目标映像文件,其中ramdisk是作为内存盘的根文件系统映像,system.img是主要文件系统的映像,这是一个比较大的文件,data.img是数据内容映像。这几个image文件是运行时真正需要的文件。

标签:

Android 的源代码结构

Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示:
.
|-- Makefile(全局的Makefile)
|-- bionic(Bionic含义为仿生,这里面是一些基础的库的源代码)
|-- bootloader(引导加载器)
|-- build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)
|-- dalvik(JAVA虚拟机)
|-- development (程序开发所需要的模板和工具)
|-- external(目标机器使用的一些库)
|-- frameworks(应用程序的框架层)
|-- hardware(与硬件相关的库)
|-- kernel(Linux2.6的源代码)
|-- packages(Android的各种应用程序)
|-- prebuilt(Android在各种平台下编译的预置脚本)
|-- recovery(与目标的恢复功能相关)
`-- system(Android的底层的一些库)


bionic目录展开一个级别的目录如下所示:
bionic/
|-- Android.mk
|-- libc
|-- libdl
|-- libm
|-- libstdc++
|-- libthread_db
`-- linker

bootloader目录展开的两个级别目录:
bootloader/
`-- legacy
|-- Android.mk
|-- README
|-- arch_armv6
|-- arch_msm7k
|-- fastboot_protocol.txt
|-- include
|-- libboot
|-- libc
|-- nandwrite
`-- usbloader

build目录展开的一个级别的目录如下所示:
build/
|-- buildspec.mk.default
|-- cleanspec.mk
|-- core (各种以mk为结尾的文件,它门是编译所需要的Makefile)
|-- envsetup.sh
|-- libs
|-- target (包含board和product两个目录,为目标所需要文件)
`-- tools(编译过程中主机所需要的工具,一些需要经过编译生成)

其中,core中的Makefile是整个Android编译所需要的真正的Makefile,它被顶层目录的Makefile引用。
envsetup.sh是一个在使用仿真器运行的时候,用于设置环境的脚本。
dalvik目录用于提供Android JAVA应用程序运行的基础————JAVA虚拟机。
development目录展开的一个级别的目录如下所示:
development
|-- apps (Android应用程序的模板)
|-- build(编译脚本模板)
|-- cmds
|-- data
|-- docs
|-- emulator (仿真相关)
|-- host (包含windows平台的一些工具)
|-- ide
|-- pdk
|-- samples(一些示例程序)
|-- simulator(大多是目标机器的一些工具)
`-- tools

在emulator目录中qemud是使用QEMU仿真时目标机器运行的后台程序,skins是仿真时手机的界面。
samples中包含了很多Android简单工程,这些工程为开发者学习开发Android程序提供了很大便利,可以作为模板使用。
external目录展开的一个级别的目录如下所示:
external/
|-- aes
|-- apache-http
|-- bluez
|-- clearsilver
|-- dbus
|-- dhcpcd
|-- dropbear
|-- elfcopy
|-- elfutils
|-- emma
|-- esd
|-- expat
|-- fdlibm
|-- freetype
|-- gdata
|-- giflib
|-- googleclient
|-- icu4c
|-- iptables
|-- jdiff
|-- jhead
|-- jpeg
|-- libffi
|-- libpcap
|-- libpng
|-- libxml2
|-- netcat
|-- netperf
|-- neven
|-- opencore
|-- openssl
|-- oprofile
|-- ping
|-- ppp
|-- protobuf
|-- qemu
|-- safe-iop
|-- skia
|-- sonivox
|-- sqlite
|-- srec
|-- strace
|-- tagsoup
|-- tcpdump
|-- tinyxml
|-- tremor
|-- webkit
|-- wpa_supplicant
|-- yaffs2
`-- zlib

在external中,每个目录表示Android目标系统中的一个模块,可能有一个或者若干个库构成。其中:
opencore为PV(PacketVideo),它是Android多媒体框架的核心。
webkit是Android网络浏览器的核心。
sqlite是Android数据库系统的核心。
openssl是Secure Socket Layer,一个网络协议层,用于为数据通讯提供安全支持。
frameworks目录展开的一个级别的目录如下所示:
frameworks/
|-- base
|-- opt
`-- policies

frameworks是Android应用程序的框架。
hardware是一些与硬件相关的库
kernel是Linux2.6的源代码
packages目录展开的两个级别的目录如下所示:
packages/
|-- apps
| |-- AlarmClock
| |-- Browser
| |-- Calculator
| |-- Calendar
| |-- Camera
| |-- Contacts
| |-- Email
| |-- GoogleSearch
| |-- HTMLViewer
| |-- IM
| |-- Launcher
| |-- Mms
| |-- Music
| |-- PackageInstaller
| |-- Phone
| |-- Settings
| |-- SoundRecorder
| |-- Stk
| |-- Sync
| |-- Updater
| `-- VoiceDialer
`-- providers
|-- CalendarProvider
|-- ContactsProvider
|-- DownloadProvider
|-- DrmProvider
|-- GoogleContactsProvider
|-- GoogleSubscribedFeedsProvider
|-- ImProvider
|-- MediaProvider
`-- TelephonyProvider

packages中包含两个目录,其中apps中是Android中的各种应用程序,providers是一些内容提供者(在Android中的一个数据源)。
packages中两个目录的内容大都是使用JAVA编写的程序,各个文件夹的层次结构是类似的。
prebuilt目录展开的一个级别的目录如下所示:
prebuilt/
|-- Android.mk
|-- android-arm
|-- common
|-- darwin-x86
|-- linux-x86
`-- windows

system目录展开的两个级别的目录如下所示:
system/
|-- bluetooth
| |-- bluedroid
| `-- brfpatch
|-- core
| |-- Android.mk
| |-- README
| |-- adb
| |-- cpio
| |-- debuggerd
| |-- fastboot
| |-- include(各个库接口的头文件)
| |-- init
| |-- libctest
| |-- libcutils
| |-- liblog
| |-- libmincrypt
| |-- libnetutils
| |-- libpixelflinger
| |-- libzipfile
| |-- logcat
| |-- logwrapper
| |-- mkbootimg
| |-- mountd
| |-- netcfg
| |-- rootdir
| |-- sh
| `-- toolbox
|-- extras
| |-- Android.mk
| |-- latencytop
| |-- libpagemap
| |-- librank
| |-- procmem
| |-- procrank
| |-- showmap
| |-- showslab
| |-- sound
| |-- su
| |-- tests
| `-- timeinfo
`-- wlan
`-- ti

转自:http://blog.chinaunix.net/u3/92408/showart_2029158.html

标签:

IBM process

你的本子是thinkpad系列的本子
imjpmig.exe是微软Microsoft输入法编辑器程序。
tintsetp.exe也是输入法的
rundll32.exe用于在内存中运行DLL文件,用于需要调用DLLs的程序
tpfnf7sp.exe 是IBM笔记本Presentation Director软件中的程序
tp4serv.exe是IBM笔记本指划器相关程序,替代鼠标设备。
tposdsvc.exe 是IBM 笔记本热键(快捷键)进程
ezejmnap.exe是IBM ThinkPad电脑EasyEject工具,用于在你的Thinkpad笔记本电脑上容易的连接多个设备。
scheduler_proxy.exe 是联想电脑Scheduler计划任务相关程序
jusched.exe是Sun Microsystem公司的Java2套装相关进程,用于检测Java的升级。
dlactrlw.exe 是SonicSolutionsCD/DVD刻录软件相关程序
isuspm.exe是Macrovision公司InstallShield安装程序相关软件。该进程用于自动检测更新。
issch.exe是InstallShield安装工具的升级服务
awaysch.exe是无人看管管理器程序。
lpmgr.exe是IBMThinkVantage系统工具相关程序
amsg.exe 是IBMThinkPad相关管理程序。
actray.exe 是IBMThinkPad网络连接管理相关程序。
acwlicon.exe也是IBMThinkPad网络连接管理相关程序。
imscinst.exe是微软Microsoft翻译工具的一部分
igfxtray.exe是Intel显卡配置和诊断程序
smax4pnp.exe是Analogue声卡设备相关程序。
SMax4.exe是SoundMAX声卡控制中心程序
imscmig.exe 是MicrosoftIME输入法的组件。
reader_sl.exe 是Adobe Reader的
ctfmon.exe 是Microsoft Office的

标签:

2009-09-02

绿色概念:风能驱动闹钟+充电器二合一

下面要介绍的这个概念产品是一个绿色环保的风能驱动设备,它包含一个闹铃和一个给小电子设备充电的便携充电器。
  现在,电对每个人的日常生活来说,都是必不可少的。不仅是以为我们习惯了住在布满各种家电的明亮房屋里生活,还因为,我们的数码生活需要各种各样的充电器。但是,电量的大量使用,也把我们的生活带到了越来越危险的境地,因为大量的不可再生储物燃料在消耗,而且,还伴随着越来越严重的环境污染问题。因此,设计环保的产品对于全球来说,是势在必行的。
  工业设计师Clarisse Paula Fernando尝试着设计了这款利用风能和人类能量驱动的小玩意儿Sol-Air ,可以解决某方面的环境污染问题。它可以给小电子设备充电,同时还可以充当闹钟。使用者唯一需要做的就是把它放在通风口,让它获得免费的风能,给内置的电池充电。
  如果没有自然风,使用者也可以手动扇风来让它驱动。 Clarisse称,只要给它5分钟的获得风能的时间,它就可以给手机充电。这个设备还可以吸收阳光,在黑暗的时候可以发光照明。


标签:

创意小玩意儿:插线板集线器二合一

不知道各位朋友们是不是很反感家里到处都露在外面的各种电源线,我反正是特别的不喜欢那样。收拾家务的时候,我经常会有些恼火,恨不得把所有的线头都藏起来。而且,也买了不少的集线器。下面要像大家介绍一个造型很酷的插线板集线器二合一设计,它采用了一个桥的造型。桥身下面是一个个的差线孔,这样把各种电器的插头插上去,然后从桥下经过,集中在一起,就不会显得那么凌乱。而且,这个插线板还可以提醒你节约用电哦。因为在桥身上面,每个插孔对应一个显示屏,上面显示电器的功率,很不错的设计吧?




标签:

键盘下面带有绘画板的超炫酷概念笔记本

各大笔记本生产厂商都在以惊人的速度推出各式各样的笔记本,上网本等等,它们的配置越来越高,功能越来越强大。下面要介绍一款来自Victor Bivol的超炫酷概念笔记本。那么这款笔记本特殊在哪儿呢?从外观看来,它与普通笔记本没什么区别,但是你仔细研究键盘部分,就会发现,键盘的下面隐藏着一个绘画板。这将大大方便一些群体人的生活,比如发明家,艺术家,设计者,插图画家家等等。有了这样的笔记本,他们就可以随时把自己的灵感绘制出来了,无论他们是在旅途中,在咖啡馆,还是在自己的小屋里。





标签:

专为路痴设计!地图与投影机的完美融合体

Maptor是一个地图与投影仪的完美融合体,它可以在任何物体的表面,投影出你想知道的地图,比如地面,墙壁,桌子甚至手掌上。而我更喜欢的原因在于它的精致,它居然只有口红般大小!有了这样的设备,那些像我一样经常分不清东西南北的路痴,就再也不需要边走边问路了,你可以打开它,随便在墙角或者地面上投影一下,就可以查看自己所在的位置,想去的地方等等信息了。
  这个Maptor更值得一提的是,它还包含了GPS功能,实在是太强大了!这样的结果是,在地图上,有一个红色的箭头,显示你所在的位置。所以,即使你再路痴,有了它也不会迷路了。
  尽管投影地图是可见的,甚至是在夜晚,但是我有点质疑的是,如果随便在地面上投影,是否能看清具体的地点。不管怎样,这样的产品还是非常实用的,对人们的生活有很大帮助,所以我个人认为这个东西是有被生产的潜力的。让我们共同期待这样的产品早日上市吧。





标签:

酷!可以夹在胳肢窝下的折叠自行车

哈哈~其实也没有那么夸张啦!胳肢窝是用来夹公文包和女士小肩包的。不过,这辆自行车用一个手,轻轻松松就能提起来,却一点也不夸张。折叠自行车我们见的多了,极客社区介绍了不少概念的,而现实生活中,也有很多小巧轻便的自行车。
  下面这辆来自Michael Soluyanov 的j-bike自行车,是他为获得学位在做的一个项目。j-bike长1600mm,折叠起来就变成860mm了。而它的宽度折叠前后的变化是560mm到340mm。折叠自行车已经成为了自行车发展的趋势,越来越受到人们的欢迎,而Michael Soluyanov的这辆自行车看起来非常酷,我喜欢~





标签:

宝马零污染未来城市概念车BMW X bike

这是来自BMW X bike设计的零排放概念车,是一辆环保的电动车。bike不知道应该不应该叫做自行车,但是这辆外形超酷的BMW X bike是在不像自行车,倒是挺像私人迷你小汽车。在不久的未来,这将是城市道路上快速穿行的交通工具。
这辆概念车由两个80KW的电动机和可再生能源驱动。车上配备的超级电容器(陶瓷电池),轻便,充电快速。X bike是一个有两个座位三个车轮的未来环保交通工具。这辆X bike概念车最大的特点在于:它可以变形,悬挂在停车场,这样,就是这辆车有很大的动态能力和在拥挤车道上顺利前行。X bike从0加速到100kph,仅需4秒时间,最高时速高于 240kph。


标签:

极具未来感的无屏幕全息图概念手机

最近各大网站以及数码前沿的人们都在关注iPhone 3G S和Palm Pre,这确实是两款不错的手机。这里,我要介绍一款手机,带你去看看手机的未来是什么样子的。哈哈~从现在开始的未来十年,各大手机生产厂商就不在为手机屏幕的改进给争夺市场了。未来的手机,将不在设屏幕。全息图将取代手机屏幕的位置。Trou Hologram移动电话将使用3D全息图占用空洞的手机屏幕位置。你可以把这个空洞屏幕当作手镯戴在手腕上。微型摄像机将内置在空洞的表面。想象一下,在未来的生活里,你也以用手机看3D地图,可以接电话的时候,看到女朋友的全息图,就好像她在你面前一样。哇!这似乎太科幻了,会有这一天的到来吗?不管怎么样,让我们期待吧!


全息图是一种三维图像,它与传统的照片有很大的区别。
  传统的照片呈现的是真实的物理图像,而全息图则包含了被记录物体的尺寸、形状、亮度和对比度等信息。这些信息储存在一个很微小但却很复杂的干涉模式中。这个干涉模式是由激光产生的。
  从三维物体上反射出来的光形成一个非常复杂的三维干涉模式。要记录下整个模式,使用的光必须严格定向,而且属于同一颜色。这样的光叫做相干光。因为激光器产生的光具有单一颜色,而且所有光波都协调同步,因此激光是制作全息图的理想光源。
  当你用光照射全息图时,储存在干涉模式中的信息就会借助入射光再现由物体反射出来的原始光波波阵。你的眼睛和大脑就会觉得原来的物体好像又出现在你面前了。
  全息技术是实现真实的三维图像的记录和再现的技术。该图像称作全息图。和其他三维“图像”不一样的是,全息图提供了“视差”。视差的存在使得观察者可以通过前后、左右和上下移动来观察图像的不同形象——好像有个真实的物体在那里一样。







标签: