|
本帖最后由 金属狂人 于 2011-9-20 23:10 编辑
! ~7 B% d% e2 H; C: W. C
' H/ D+ M0 C& T: P" t: q2 `) i) K前言
6 l+ A8 }% ]1 x4 E
4 @* |# ?& R/ k* i, m. Y1 L& X+ B/ l app2sd“伪造一个内部储存空间来,然后将程序装到这里面去。- A4 j2 t1 k, N6 Q( @4 J
/ c I# n# w9 k" t2 l) s
App2sd+将更多的东西放到sd卡,省出更多空间。
2 P* g3 ~2 {2 E* r0 H" d8 i2 [# S( a( _ n5 K
详解请看下文,有点电脑基础的人更容易看懂。
. G5 K6 S8 f7 U% @9 p' V( N
+ F3 I, ^# R( o/ U; C 就如同你的电脑上有硬盘一样,手机上也有“硬盘”,那就是你的SD卡。如同你在电脑上可以给硬盘分区一样,sd卡同样能
/ R D$ E. j `( ~* w' \7 w% a
" h3 u1 X- A! G3 h i: i- T8 F% V分区。一般来说,不论你是否分区,你的sd卡买回来之后,就只有一个很大的fat32区,当然,这个fat32格式的卡,足够让你储& n& T7 o- o3 N, A6 K
+ Z0 v, }0 A, R* y
存相片,短信,email等等。在Android手机上,除了你外置的sd卡以外,还有手机内部闪存(NAND)。传统意义上来说,以前7 }6 a1 U7 [5 J
- @" n# P& w$ ]. Q
2 o, ^0 l. |' |. e* h% r
你只能将软件安装到NAND中而不能把软件安装到sd卡中。于是,尴尬的是,当你有一个32g的sd卡,但只有5mb的内部存储,
. q' v. w' p& j, |4 P( f' R
, F; X- J) }3 ^同样不能安装多少软件,装几个后手机就提示空间已满。Android手机只允许装到NAND中的一个原因是保护知识产权也就是防止
' A4 N5 p! [- a3 w$ m5 ^% U7 e. |1 X4 N7 E0 T
盗版。访问手机内部存储空间就是一件很麻烦的事情,(一般来说没有root是完全不可能的)。正因为访问很麻烦,所以你很难
3 W% R' X5 I8 m
1 U& x& \9 x) u Y到那里面去把app拷贝下来然后再发到网上去让别人安装。
' k2 n3 q& F6 c! L! S7 p1 V& f; T+ R* x
但这样一来,像我们这些很喜欢装很多app的人,就尴尬了。虽然这些app都是合法拷贝,但是内部存储空间很快就会耗尽而无. b4 t' t6 R9 R# n- |' e. Q" z
! d e6 u" @" E" Y' i1 U7 T法安装新软件。所以,2.2的android,Google给了一种将软件安装到sd卡的办法,这样就能安装更多软件。Sd上会生成一个大概
: Z& V/ [5 S% Z4 N T( f4 i
8 a0 v4 j p5 K7 ^叫做 .android_secure的文件夹,将软件安装到里面。但这个方法有一些问题:
+ v% Y7 `- m! l p1 K) d5 `7 p. x$ G k& h. G( L8 `1 J
1,软件不是自动安装到sd卡中这个文件夹,你需要手动去点击“移动到sd卡”) \* C9 z. r2 V" [% {
! G# f$ l! _3 K# e 2,不是说有的软件都能被“移动”,事实上很多软件都不能移动。是否能移动到sd卡,取决于开发者是否更新软件并允许移
/ B! r9 h3 l9 a- ]) ^0 [5 ]5 Q- m- N! d5 P
动。很多开发者不愿意更新。
) j2 C) R/ G6 Y" Q
& {' B8 z. T$ I 3,即便能移动过去,不是所有的软件数据都移动到sd卡,同样有一些信息是需要保留在NAND上面的,所以,你的手机照; {- `0 S+ Z- F' g
1 G; R( a, j& l7 z: r: Y; t样会很快就用完内部存储。& |/ }: I; n0 t" \* j4 Z5 L. Z$ p% M
- `4 e9 i# |1 B+ K+ H& L' g1 R* P
4,你可以通过命令行强制将所有软件都装到sd卡上。但这么做的后果就是,小插件什么的就不再能用。这就是官方2.2的& n; P a# V4 I% {* n9 P7 f
2 E$ h$ m& ?) g. _app2sd。但是在2.2出来之前,一些聪明的人搞出来了一个民间的所谓apps2sd。记得之前开头我说过sd卡就是一个很大的fat32分
2 \5 K, S0 H/ @' z( }9 [) @8 f- g6 Q" Q8 h
区?apps2sd通过将你的sd卡分区成两个文件系统,达到将软件安装到sd卡的目的:一个如之前一样的fat32分区,让你装之前需
6 E, @& U0 `4 w( u k: Q
# E7 ?2 {) T" D$ |* |要在sd卡上安装的东西;另外创建一个ext分区。Ext只是一个文件系统的名称,同fat32,ntfs一样,只是这个ext系统是android0 X. Z) Y/ A* P b
( s3 m- c$ F2 g$ }7 D4 y' z: D
内部存储用的格式。Sd卡之所以一般都是fat32格式,那是因为这个格式的使用是最广泛的,windows,linux,都能使用这个格
' J9 d; m% v+ F Z* K6 K
" Q/ w2 `3 \! e! T式,而ext格式一般来说,只是在linux下可以看到并读取。Ext格式有不同的版本。最常见的就是ext3。和ext2比起来,最大的不
$ x- l: z! X1 b! f0 `# w- P. T) `. N7 M! }0 y* B* o- L
同就是ext3格式有了“日志”(Journal)功能。日志功能最大的好处,就是当你的操作(如对sd进行读取或者写作的过程中)因2 q+ E% R" M8 g2 Q" m% i
h! I% D- s! P1 K3 f为意外原因别打断(比如,突然断电),那么,有日志功能的ext3分区上的文件,不会有任何损坏或者丢失。当我们每次打开
4 }' W" v; [1 L* d L# ~: E1 g% N: i2 S$ G; d% S Y' W) P
我们的电话时,上面总是提示“正在准备sd卡”。每次都提示正在准备,但其实系统正在做的就是检查fat32格式是不是损坏,这. q6 C, ` p% |5 i3 g% ^
, a$ o& L2 U' Y- _" R$ _# X7 E _
正是因为fat32格式不具备日志功能。回想一下以前在windows98年代的日子,每次当我们并非正确关机或者突然重启之后,会
; J" X2 u2 m' ^# Q
9 C! R, a* y1 N出来一个带着扫描进度条的蓝屏,这个扫描进度条和现在正在准备sd卡,是一个意思。但当我们后来用windows 2000、
1 I6 J+ f3 I. g3 P+ z5 e6 a" E9 e8 P/ X) p( I. J3 D# J
windows xp时,因为这两个系统开始支持带有日志功能的ntfs,所以在这两个系统下,文件系统损坏的可能被降低了。
. {! n v$ O4 c: l8 f$ _6 i8 g, x" \9 c2 q* O6 _5 t7 v7 p
了:fat32格式和ext格式。至于ext格式是ext3还是ext4,不是很重要。使用ext4,并不会带来什么好处(译者注:有时候rom不
. M/ e/ Q; g! O
, d6 F# f4 V t支持ext4,反而麻烦)。当你分好区之后,apps2sd在你的电话上运行一段脚本,从手机的内部存储创建一个“符号链接”# Z; B4 [5 |' X( Y+ Y" ~! c
, r8 p! @4 D- u1 b9 q(symbolic links)到sd卡的ext分区上。一个符号链接和快捷方式的意思有点像,但是,一个符号链接对于操作系统来说,是不
- x) e" A, v* Q1 u0 g5 ^9 ?/ D( o# M% {+ d+ H1 l/ m
可见的。换句话,有了这个对操作系统不可见的符号链接的android系统,当你在安装软件到内部存储的时候,系统无法分辨你4 y9 [9 K- K% l# y. I: c6 u, B
: h8 L4 y1 R+ n- ]0 u3 Z" e" o. S
是安装到了内部存储NAND中还是sd卡的ext分区中,于是,就这么瞒天过海,软件从手机内部存储安装到了sd卡上。这样,这5 K+ k7 O' Q0 p" |, Y; S. t1 P
* d/ W- K- S1 u! P" q! `2 W
个方式可以很有效的节省你的手机内部存储。5 [5 U5 q S3 c2 o7 N
+ s7 K* a( e( O- i! n
但是,这个ext分区在windows下是不可见的。在windows下,你的sd卡像是少了一部分空间一样,而少的这一部分,就是你的$ O1 y V7 ?% t4 g1 W. `
3 E' T- B0 k0 c Fext分区的空间。比如,你有一张4g的sd卡,(大概有3.5g的实际使用空间),然后你创造了一个512m的ext分区,这时将卡插& o; _7 _! {5 h. A7 ~
% o5 W; G0 V* @) W& \到电脑上,windows显示你的卡就只有3g了。“失去”的那些空间其实没有失去,只是被windows无法看到的ext分区使用了。当你
6 f8 M. b5 J* Z; ]7 ^4 G
* b# P0 H) L, b9 p5 R重新格式化你的sd卡时,这些空间自然就又会出现。更重要的是,应为ext格式支持日志功能,所以这个分区不需要“正在准备sd$ p6 w, z) U) v# [
1 }% H' [( J- H* N卡”,意味着这个分区在你手机启动的一刹那就可以正常的访问:所有你桌面小工具啊等等东西,就可以开机运行。(不像2.2的
5 X8 P3 U& F9 @% B% E1 L/ [
4 h' R0 n& a G; d' ?app2sd,开机之后小插件消失)
- J0 B5 E" F) C8 m* D
: y. f$ N3 }! D6 `2 Y) k' ? NAND存储空间。Apps2sd+就将Davlik Cache也一并移动到了ext分区上,省出更多的空间。一些人认为,这样会导致性能
6 t# j9 \! u' j4 E; K. {7 r
- F. p) U+ J3 }# f的损失,因为他们觉得内部存储的NAND应该总是比外部的sd卡块。(这就是为什么人们总是争吵到底是class 4还是class 6的sd% k, q% ~+ H5 ^/ ]3 g0 I
1 f4 s/ B! b$ s$ ?* F
卡,更适合apps2sd,这争吵背后的逻辑就是,更快的卡对性能提升更好)。但事实是,你的程序最后还是从手机中RAM中开始+ ]1 q, y N' C' q
, J& ?( d6 R/ Z, C! i; o运行,所以,基本上没有什么影响。同时,考虑到大多数的软件都是几百k,最多不过1,2m,其实对性能没有任何影响。还有就
( {3 L5 }0 ]5 c1 h% d4 l9 X3 c% R; l" l# c: Y
是,任何最近发布的apps2sd或者apps2sd+都可以在任何sd卡上工作,不论这个sd卡是否有ext分区。在手机第一次启动的时
5 `5 O' G+ U q+ E, T
- Y! A# g# z# M Q+ g6 b候,它会自动检查sd卡,如果卡上没有分区,那么,它就自动将程序撞到手机内部存储中。同样,即便你的卡有了ext分区,但. ?- w% @- I+ d3 @7 h( \ C
+ z6 h3 e) k' E M5 G. h没有apps2sd+功能,这也不会引起任何问题。 |
|