|
本帖最后由 金属狂人 于 2011-9-20 23:10 编辑
0 ~/ F9 a/ X3 i3 L8 q9 x# h% [" q3 P, X
前言
! J6 `! {9 g2 ~2 C
; s2 V. u! W/ D7 B7 ]% s4 _ app2sd“伪造一个内部储存空间来,然后将程序装到这里面去。1 S5 |0 s/ A# G2 ~" T" @. G1 {
/ R4 A7 R" t; ~
App2sd+将更多的东西放到sd卡,省出更多空间。( \: j0 X8 z4 h( A; b
8 L! X& K5 |* p1 ]5 V
详解请看下文,有点电脑基础的人更容易看懂。
9 a/ G. @, Y5 m5 u) @
- |) ^1 v( Z. \1 b3 d5 C 就如同你的电脑上有硬盘一样,手机上也有“硬盘”,那就是你的SD卡。如同你在电脑上可以给硬盘分区一样,sd卡同样能
' C% t2 D; h" b9 W" t* t$ T- B' J4 K* y
分区。一般来说,不论你是否分区,你的sd卡买回来之后,就只有一个很大的fat32区,当然,这个fat32格式的卡,足够让你储
" F: v/ N* u( V1 N, {9 ?9 `. W
存相片,短信,email等等。在Android手机上,除了你外置的sd卡以外,还有手机内部闪存(NAND)。传统意义上来说,以前& A' \( j8 \ c1 j
1 v6 ?/ k6 m: c. f$ A* r/ r! `' @3 ^3 E" M0 f/ y, W
你只能将软件安装到NAND中而不能把软件安装到sd卡中。于是,尴尬的是,当你有一个32g的sd卡,但只有5mb的内部存储,
2 d K! Z; A1 D- n- ~( {; _9 K: F" j5 Q( L9 h" f
同样不能安装多少软件,装几个后手机就提示空间已满。Android手机只允许装到NAND中的一个原因是保护知识产权也就是防止
3 H. A) C( H% [8 N2 o7 k+ `3 b( }! s! z" E) b$ Z4 a) A
盗版。访问手机内部存储空间就是一件很麻烦的事情,(一般来说没有root是完全不可能的)。正因为访问很麻烦,所以你很难
1 B; H0 y& u% K# U P9 K' r8 L! O+ Z" }: ~! u
到那里面去把app拷贝下来然后再发到网上去让别人安装。
& E, y( s w* S4 M, x. W0 ]9 |- O# f+ w2 z' {) F
但这样一来,像我们这些很喜欢装很多app的人,就尴尬了。虽然这些app都是合法拷贝,但是内部存储空间很快就会耗尽而无
. `/ U( d5 C5 b* e% A& V& m) R+ L. D
法安装新软件。所以,2.2的android,Google给了一种将软件安装到sd卡的办法,这样就能安装更多软件。Sd上会生成一个大概3 c: z* j; `# I
. N N& {+ J/ O" p6 M- M" ^叫做 .android_secure的文件夹,将软件安装到里面。但这个方法有一些问题:
" X# l5 A" |0 n1 R( f0 n# m, i4 m. i
1,软件不是自动安装到sd卡中这个文件夹,你需要手动去点击“移动到sd卡”" X, j8 w: i1 V! ~& w3 A
$ q& t1 ^# J2 ?2 A* H# Q9 ]! X2 m9 [
2,不是说有的软件都能被“移动”,事实上很多软件都不能移动。是否能移动到sd卡,取决于开发者是否更新软件并允许移
. X2 g1 m) [! k' ~6 F
8 l- I0 P' h+ O5 x8 v动。很多开发者不愿意更新。
0 I" b1 S! ^) `; m" _
: O3 W2 [; x( l" a! @( W 3,即便能移动过去,不是所有的软件数据都移动到sd卡,同样有一些信息是需要保留在NAND上面的,所以,你的手机照6 H6 m% a2 _$ N" H
7 M# l# N; Y" Z5 z: t5 ?# K9 z样会很快就用完内部存储。
3 D9 H1 O$ C" h1 L8 w! U/ ?" G9 Y1 |
4,你可以通过命令行强制将所有软件都装到sd卡上。但这么做的后果就是,小插件什么的就不再能用。这就是官方2.2的. M4 i% C: b5 Z/ ?
, w/ Q( V! W% @3 A( d0 d0 s
app2sd。但是在2.2出来之前,一些聪明的人搞出来了一个民间的所谓apps2sd。记得之前开头我说过sd卡就是一个很大的fat32分
; t2 \7 h6 L4 W/ v' x4 ]. X- G* n5 T9 x* d6 T" ?$ m
区?apps2sd通过将你的sd卡分区成两个文件系统,达到将软件安装到sd卡的目的:一个如之前一样的fat32分区,让你装之前需& M1 U+ R0 G+ W w
6 e: s E' b' l4 @/ c* e7 f' Q
要在sd卡上安装的东西;另外创建一个ext分区。Ext只是一个文件系统的名称,同fat32,ntfs一样,只是这个ext系统是android1 I$ F' `- U2 R" T! l/ v5 A
7 J1 Y9 M% W& X3 x
内部存储用的格式。Sd卡之所以一般都是fat32格式,那是因为这个格式的使用是最广泛的,windows,linux,都能使用这个格1 N9 u5 p/ P* o9 x- s! ?& |/ k) h
* }1 {: j* w& } e: R
式,而ext格式一般来说,只是在linux下可以看到并读取。Ext格式有不同的版本。最常见的就是ext3。和ext2比起来,最大的不
, \# i) D. E7 J2 N7 a% M0 ]) p# o+ `: C, c
同就是ext3格式有了“日志”(Journal)功能。日志功能最大的好处,就是当你的操作(如对sd进行读取或者写作的过程中)因2 f4 i. w0 X: _+ j$ m7 ?/ H, @% H+ t
( ]. ?. B) z5 q' t7 G9 j
为意外原因别打断(比如,突然断电),那么,有日志功能的ext3分区上的文件,不会有任何损坏或者丢失。当我们每次打开
0 L% i1 E. v( l" E9 R" c4 y$ g3 ?+ `# X7 _
我们的电话时,上面总是提示“正在准备sd卡”。每次都提示正在准备,但其实系统正在做的就是检查fat32格式是不是损坏,这
7 Q! h% I! r# s( u( Q9 s3 A4 V& z+ y0 c* s) }7 U# k' J
正是因为fat32格式不具备日志功能。回想一下以前在windows98年代的日子,每次当我们并非正确关机或者突然重启之后,会2 v- [1 l2 R2 J" L9 m+ `
# H* L, J0 J" A" R, K
出来一个带着扫描进度条的蓝屏,这个扫描进度条和现在正在准备sd卡,是一个意思。但当我们后来用windows 2000、
" b: Q7 s" r$ Y; X4 u7 L- I* W e9 e; C& _. L+ q* ^
windows xp时,因为这两个系统开始支持带有日志功能的ntfs,所以在这两个系统下,文件系统损坏的可能被降低了。
* ~" Q; E& K9 y: \; T" w! }; L
8 {7 i4 l) ^6 T. D7 C, p9 @了:fat32格式和ext格式。至于ext格式是ext3还是ext4,不是很重要。使用ext4,并不会带来什么好处(译者注:有时候rom不
j) W2 ?7 ?' z' q, k* B6 f( A9 L+ Q
0 b( h/ F% a- `% |支持ext4,反而麻烦)。当你分好区之后,apps2sd在你的电话上运行一段脚本,从手机的内部存储创建一个“符号链接”
8 Z, o! q R4 w$ C0 q6 y1 S+ G4 m5 M/ B z l
(symbolic links)到sd卡的ext分区上。一个符号链接和快捷方式的意思有点像,但是,一个符号链接对于操作系统来说,是不3 a! t) m6 O3 K. t
: Q/ |! g' g" c5 h) h) i可见的。换句话,有了这个对操作系统不可见的符号链接的android系统,当你在安装软件到内部存储的时候,系统无法分辨你) R7 R, l! A; t9 k% y( \
, Q0 x, N( S/ @' w是安装到了内部存储NAND中还是sd卡的ext分区中,于是,就这么瞒天过海,软件从手机内部存储安装到了sd卡上。这样,这$ F* ]. J# i: r' F
; X( X1 F$ t e8 l* K个方式可以很有效的节省你的手机内部存储。. T0 R' P! D2 [# Y
6 ]8 J+ `. w7 i! d+ w 但是,这个ext分区在windows下是不可见的。在windows下,你的sd卡像是少了一部分空间一样,而少的这一部分,就是你的7 e/ m( b5 C4 Y' H( p/ t& Z
% \. Y/ I$ V8 mext分区的空间。比如,你有一张4g的sd卡,(大概有3.5g的实际使用空间),然后你创造了一个512m的ext分区,这时将卡插7 }( b3 ?& s6 E( H
$ ?0 M% L, h' l+ c! y
到电脑上,windows显示你的卡就只有3g了。“失去”的那些空间其实没有失去,只是被windows无法看到的ext分区使用了。当你
: ]9 s" h) |- f. G, H9 J4 v9 _, R- L9 ~0 _( z
重新格式化你的sd卡时,这些空间自然就又会出现。更重要的是,应为ext格式支持日志功能,所以这个分区不需要“正在准备sd
& Q' Y; P3 h0 J. C& C" @% |# S7 P
D; `9 f4 H. D* X t1 ~) d: s+ N) A卡”,意味着这个分区在你手机启动的一刹那就可以正常的访问:所有你桌面小工具啊等等东西,就可以开机运行。(不像2.2的
+ h; s) ^3 `# Q9 i9 U8 }6 L" w
' w7 Y$ c9 t; F, n, [# papp2sd,开机之后小插件消失)7 q1 C; f9 { h" {+ _( b
# s9 q* J& o- F: a# D NAND存储空间。Apps2sd+就将Davlik Cache也一并移动到了ext分区上,省出更多的空间。一些人认为,这样会导致性能' ^4 P( i( x' m) a" s T1 ?" a
6 d0 c$ r5 c1 `, ?. q
的损失,因为他们觉得内部存储的NAND应该总是比外部的sd卡块。(这就是为什么人们总是争吵到底是class 4还是class 6的sd
, X6 J: x" ~! y3 f6 x' O: i
0 u( w$ ?! O2 W& U7 a2 b- E卡,更适合apps2sd,这争吵背后的逻辑就是,更快的卡对性能提升更好)。但事实是,你的程序最后还是从手机中RAM中开始
+ C, E0 H- k0 C2 ?9 e$ t
$ l& M& I0 [8 e+ m运行,所以,基本上没有什么影响。同时,考虑到大多数的软件都是几百k,最多不过1,2m,其实对性能没有任何影响。还有就 \( v" }% e' o6 U2 O* G
9 E; t' E- Q$ I0 R2 T- x是,任何最近发布的apps2sd或者apps2sd+都可以在任何sd卡上工作,不论这个sd卡是否有ext分区。在手机第一次启动的时) V" M: N6 Q5 t
' @, ]" T1 z" f1 ^+ ~" u
候,它会自动检查sd卡,如果卡上没有分区,那么,它就自动将程序撞到手机内部存储中。同样,即便你的卡有了ext分区,但
0 c: E$ o/ s& H Z8 N$ k8 V0 X9 G. [- X% c, j6 `4 i+ ~* |8 T
没有apps2sd+功能,这也不会引起任何问题。 |
|