精华内容
下载资源
问答
  • 文章介绍了压缩映射原理,并给出了它在隐函数存在性,微分方程解的存在唯一性,方程的近似解和数列的极限四个方面的重要应用。
  • 用“压缩映射原理证明数列收敛

    千次阅读 2020-07-09 10:00:02
    用“压缩映像”原理证明数列收敛 定理 1∘1^{\circ}1∘ 对于任一数列 {xn}\left\{x_{n}\right\}{xn​}而言,若存在常数 r, 使得 ∀n∈N\forall n \in \mathbf{N}∀n∈N, 桓有 ∣xn+1−xn∣⩽r∣xn−xn−1∣,0<r<...

    用“压缩映像”原理证明数列收敛

    定理

    1 ∘ 1^{\circ} 1 对于任一数列 { x n } \left\{x_{n}\right\} {xn}而言,若存在常数 r, 使得 ∀ n ∈ N \forall n \in \mathbf{N} nN, 桓有

    ∣ x n + 1 − x n ∣ ⩽ r ∣ x n − x n − 1 ∣ , 0 < r < 1 → ( A ) \left|x_{n+1}-x_{n}\right| \leqslant r\left|x_{n}-x_{n-1}\right|,0< r< 1\rightarrow(A) xn+1xnrxnxn1,0<r<1(A)

    则数列 { x n } \left\{x_{n}\right\} {xn}收敛.


    2 ∘ 2^{\circ} 2特别,若数列 { x n } \left\{x_{n}\right\} {xn} 利用递推公式给出:

    x n + 1 = f ( x n ) ( n = 1 , 2 , ⋯   ) x_{n+1}=f\left(x_{n}\right)(n=1,2, \cdots) xn+1=f(xn)(n=1,2,), 其中 f 为某一可微函数,且 ∃ r ∈ R \exists r\in R rR,使得

    ∣ f ′ ( x ) ∣ ⩽ r < 1 ( ∀ x ∈ R ) → ( B ) \left|f^{\prime}(x)\right| \leqslant r<1 \quad(\forall x \in \mathbf{R}) \rightarrow(B) f(x)r<1(xR)(B)

    { x n } \left\{x_{n}\right\} {xn}收敛.

    证明

    1 ∘ 1^{\circ} 1

     此时  ∣ x n + p − x n ∣ ⩽ ∑ k = n + 1 n + p ∣ x k − x k − 1 ∣ ⩽ ∑ k = n + 1 n + p r k − 1 ∣ x 1 − x 0 ∣ = ∣ x 1 − x 0 ∣ ⋅ r n − r n + p 1 − r ⩽ ∣ x 1 − x 0 ∣ r n 1 − r \begin{array}{l} \text { 此时 }\left|x_{n+p}-x_{n}\right| &\leqslant \sum_{k=n+1}^{n+p}\left|x_{k}-x_{k-1}\right| \\ &\leqslant \sum_{k=n+1}^{n+p} r^{k-1}\left|x_{1}-x_{0}\right|\\ &=\left|x_{1}-x_{0}\right| \cdot \frac{r^{n}-r^{n+p}}{1-r} \\ &\leqslant\left|x_{1}-x_{0}\right| \frac{r^{n}}{1-r} \end{array}  此时 xn+pxnk=n+1n+pxkxk1k=n+1n+prk1x1x0=x1x01rrnrn+px1x01rrn

    应 用 C a u c h y 准 则 , 知 ∣ x n ∣ 收 敛 . 或 利 用 D ′ A l e m b e r t 判 别 法 , 可 知 级 数 应用 Cauchy 准则,知 | x_{n} \mid 收敛. 或利用 D'Alembert 判别法,可知 级数 Cauchyxn.DAlembert,

    Σ ( x n − x n − 1 ) 绝 对 收 敛 , 从 而 序 列 \Sigma \left(x_{n}-x_{n-1}\right) 绝对收敛,从而序列 Σ(xnxn1),

    x n = ∑ i = 1 n ( x k − x k − 1 ) + x 0 ( n = 1 , 2 , ⋯   ) x_{n}=\sum_{i=1}^{n}\left(x_{k}-x_{k-1}\right)+x_{0} \quad(n=1,2, \cdots) xn=i=1n(xkxk1)+x0(n=1,2,)

    收敛。


    2 ∘ 2^{\circ} 2 若(B)式成立,利用微分中值定理:

    ∣ x n + 1 − x n ∣ = ∣ f ( x n ) − f ( x n − 1 ) ∣ = ∣ f ′ ( ξ ) ( x n − x n − 1 ) ∣ ⩽ r ∣ x n − x n − 1 ∣ , n = 2 , 3 , ⋯ \begin{aligned} \left|x_{n+1}-x_{n}\right| &=\left|f\left(x_{n}\right)-f\left(x_{n-1}\right)\right| \\ &=\left|f^{\prime}(\xi)\left(x_{n}-x_{n-1}\right)\right| \\ & \leqslant r\left|x_{n}-x_{n-1}\right|, n=2,3, \cdots \end{aligned} xn+1xn=f(xn)f(xn1)=f(ξ)(xnxn1)rxnxn1,n=2,3,

    即此时(A)式亦成立,故由 1 ∘ 1^{\circ} 1 { x n } \left\{x_{n}\right\} {xn}收敛

    应用举例


    1、 证明数列 x 0 = 1 , x n + 1 = 2 x n , n = 0 , 1 , 2 , ⋯ x_{0}=1, x_{n+1}=\sqrt{2 x_{n}}, n=0,1,2, \cdots x0=1,xn+1=2xn ,n=0,1,2,
    极限,并求其值.

    证:显然 1 ⩽ x 0 < 2 ; 1 \leqslant x_{0}<2 ; 1x0<2; 1 ⩽ x n < 2 1 \leqslant x_{n}<2 1xn<2 1 ⩽ x n + 1 = 2 x n < 2 ⋅ 2 = 2 1 \leqslant x_{n+1}=\sqrt{2 x_{n}}< \sqrt{2 \cdot 2}=2 1xn+1=2xn <22 =2 . 故一切 n ∈ N , n \in \mathbf{N}, nN, 1 ⩽ x n < 2 1 \leqslant x_{n}<2 1xn<2

    故对 f ( x ) = 2 x , f(x)= \sqrt{2 x} , f(x)=2x ,

    ∣ f ′ ( x ) ∣ = 2 2 x ⩽ 2 2 < 1 \left|f^{\prime}(x)\right|=\frac{\sqrt{2}}{2 \sqrt{x}} \leqslant \frac{\sqrt{2}}{2}<1 f(x)=2x 2 22 <1

    即(B)式成立满足压缩映像条件,故 { x n } \left\{x_{n}\right\} {xn}收敛

    利用单调有界原理,知 { x n } \left\{x_{n}\right\} {xn}收敛. 记 A = lim ⁡ n → ∞ x n , A=\lim _{n \rightarrow \infty} x_{n}, A=limnxn, x n + 1 = 2 x n x_{n+1}= \sqrt{2 x_{n}} xn+1=2xn 中取极 限得 A = 2 A , A = 0 或 2 A=\sqrt{2A}, A=0 或 2 A=2A ,A=02

    0 < x n ↗ , 0<x_{n} \nearrow, 0<xn,所以 A = 0 A=0 A=0不合题意,极 限 lim ⁡ n → ∞ x n = 2 \lim _{n \rightarrow \infty} x_{n}=2 limnxn=2


    2、 x 1 > 0 , x n + 1 = c ( 1 + x n ) c + x n ( c > 1  为常数  ) , x_{1}>0, x_{n+1}=\frac{c\left(1+x_{n}\right)}{c+x_{n}}(c>1 \text { 为常数 }), x1>0,xn+1=c+xnc(1+xn)(c>1 为常数 ), lim ⁡ n → ∞ x n \lim _{n \rightarrow \infty} x_{n} limnxn

    证:因 x n > 0 , x_{n}>0, xn>0, x > 0 x>0 x>0时 , f ′ ( x ) = [ c ( 1 + x ) c + x ] x ′ = c ( c − 1 ) ( c + x ) 2 > 0 , f^{\prime}(x)= \left[\frac{c(1+x)}{c+x}\right]_{x}^{\prime}=\frac{c(c-1)}{(c+x)^{2}}>0, f(x)=[c+xc(1+x)]x=(c+x)2c(c1)>0,又由 c > 1 c>1 c>1

    0 < f ′ ( x ) = c ( c − 1 ) ( c + x ) 2 ⩽ c ( c − 1 ) c 2 = 1 − 1 c < 1 ( ∀ x > 0 ) 0< f^{\prime}(x)=\frac{c(c-1)}{(c+x)^{2}} \leqslant \frac{c(c-1)}{c^{2}}=1-\frac{1}{c}<1(\forall x>0) 0<f(x)=(c+x)2c(c1)c2c(c1)=1c1<1(x>0)

    x n + 1 = f ( x n ) x_{n+1}=f\left(x_{n}\right) xn+1=f(xn)为压缩映像 { x n } \left\{x_{n}\right\} {xn}收敛

    x n + 1 = c ( 1 + x n ) c + x n x_{n+1}=\frac{c\left(1+x_{n}\right)}{c+x_{n}} xn+1=c+xnc(1+xn) 中取极限,故极限为 lim ⁡ n → ∞ x n = c . \lim _{n \rightarrow\infty} x_{n}=\sqrt{c}. limnxn=c .


    展开全文
  • 数列 {xn}\{x_n\}{xn​} 收敛,极限记作 xˉ\bar{x}xˉ,从而 lim⁡n→∞xn=lim⁡n→∞f(xn−1)=xˉ\lim_{n\to\infty}x_n=\lim_{n\to\infty}f(x_{n-1})=\bar{x}n→∞lim​xn​=n→∞lim​f(xn−1​)=xˉ 由于 f(x)f(x...

    定理:

    f ( x ) f(x) f(x) [ a , b ] [a,b] [a,b] 上连续, ∀   x , y ∈ [ a , b ] \forall\,x,y\in[a,b] x,y[a,b],满足 a ⩽ f ( x ) ⩽ b a\leqslant f(x)\leqslant b af(x)b ∣ f ( x ) − f ( y ) ∣ ⩽ a ⋅ ∣ x − y ∣ ( 0 ⩽ a < 1 ) |f(x)-f(y)|\leqslant a\cdot |x-y|(0\leqslant a<1) f(x)f(y)axy(0a<1). 此时:存在唯一的 x ˉ ∈ [ a , b ] \bar{x}\in[a,b] xˉ[a,b],使得 f ( x ˉ ) = x ˉ f(\bar{x})=\bar{x} f(xˉ)=xˉ.

    证明:

    任意确定 x 0 ∈ [ a , b ] x_0\in[a,b] x0[a,b],令 x n = f ( x n − 1 ) ( n = 1 , 2 , ⋯   ) x_n=f(x_{n-1})(n=1,2,\cdots) xn=f(xn1)(n=1,2,),则

    ∣ x n + 1 − x n ∣ = ∣ f ( x n ) − f ( x n − 1 ) ∣ ⩽ a ∣ x n − x n − 1 ∣ |x_{n+1}-x_{n}|=|f(x_n)-f(x_{n-1})|\leqslant a|x_n-x_{n-1}| xn+1xn=f(xn)f(xn1)axnxn1

    从而不难得到:

    ∣ x n + 1 − x n ∣ ⩽ a n ∣ x 1 − x 0 ∣ |x_{n+1}-x_{n}|\leqslant a^n|x_1-x_0| xn+1xnanx1x0

    从而对任意的自然数 p p p,有:

    ∣ x n + p − x n ∣ ⩽ ∣ x n + p − x n + p − 1 ∣ + ∣ x n + p − 1 − x n + p − 2 ∣ + ⋯ + ∣ x n + 1 − x n ∣ ⩽ a n + p − 1 ∣ x 1 − x 0 ∣ + a n + p − 2 ∣ x 1 − x 0 ∣ + ⋯ + a n ∣ x 1 − x 0 ∣ = a n 1 − a p 1 − a ∣ x 1 − x 0 ∣ ⩽ a n 1 − a ∣ x 1 − x 0 ∣ \begin{aligned} |x_{n+p}-x_n|&\leqslant|x_{n+p}-x_{n+p-1}|+|x_{n+p-1}-x_{n+p-2}|+\cdots+|x_{n+1}-x_n|\\ &\leqslant a^{n+p-1}|x_1-x_0|+a^{n+p-2}|x_1-x_0|+\cdots+a^n|x_1-x_0|\\ &=a^n\frac{1-a^{p}}{1-a}|x_1-x_0|\\ &\leqslant\frac{a^n}{1-a}|x_1-x_0| \end{aligned} xn+pxnxn+pxn+p1+xn+p1xn+p2++xn+1xnan+p1x1x0+an+p2x1x0++anx1x0=an1a1apx1x01aanx1x0

    从而

    lim ⁡ n → ∞ ∣ x n + p − x n ∣ ⩽ lim ⁡ n → ∞ a n 1 − a ∣ x 1 − x 0 ∣ = 0 \lim_{n\to\infty}|x_{n+p}-x_n|\leqslant\lim_{n\to\infty}\frac{a^n}{1-a}|x_1-x_0|=0 nlimxn+pxnnlim1aanx1x0=0

    根据柯西收敛原理,数列 { x n } \{x_n\} {xn} 收敛,极限记作 x ˉ \bar{x} xˉ,从而

    lim ⁡ n → ∞ x n = lim ⁡ n → ∞ f ( x n − 1 ) = x ˉ \lim_{n\to\infty}x_n=\lim_{n\to\infty}f(x_{n-1})=\bar{x} nlimxn=nlimf(xn1)=xˉ

    由于 f ( x ) f(x) f(x) 连续,所以

    x ˉ = lim ⁡ n → ∞ f ( x n − 1 ) = f ( lim ⁡ x → ∞ x n − 1 ) = f ( x ˉ ) \bar{x}=\lim_{n\to\infty}f(x_{n-1})=f(\lim_{x\to\infty}x_{n-1})=f(\bar{x}) xˉ=nlimf(xn1)=f(xlimxn1)=f(xˉ)

    下证唯一性.

    假设还有 y ˉ ∈ [ a , b ] , y ˉ ≠ x ˉ \bar{y}\in[a,b],\bar{y}\ne\bar{x} yˉ[a,b],yˉ=xˉ,使 f ( y ˉ ) = y ˉ f(\bar{y})=\bar{y} f(yˉ)=yˉ,则 ∣ f ( y ˉ ) − f ( x ˉ ) ∣ = ∣ y ˉ − x ˉ ∣ |f(\bar{y})-f(\bar{x})|=|\bar{y}-\bar{x}| f(yˉ)f(xˉ)=yˉxˉ,另一方面,由题设知 ∣ f ( y ˉ ) − f ( x ˉ ) ∣ ⩽ α ∣ y ˉ − x ˉ ∣ ( 0 ⩽ α < 1 ) |f(\bar{y})-f(\bar{x})|\leqslant \alpha|\bar{y}-\bar{x}|\quad(0\leqslant\alpha<1) f(yˉ)f(xˉ)αyˉxˉ(0α<1). 故 ∣ y ˉ − x ˉ ∣ ⩽ α ∣ y ˉ − x ˉ ∣ |\bar{y}-\bar{x}|\leqslant\alpha|\bar{y}-\bar{x}| yˉxˉαyˉxˉ,矛盾.因此 x ˉ \bar{x} xˉ 是唯一的.


    2021年3月26日09:50:10

    展开全文
  • 压缩映射不动点定理

    千次阅读 2020-11-05 13:45:21
    压缩映射不动点定理压缩映射压缩映射原理证明 压缩映射 设 AAA 为 XXX 的子集,映射 f:A→Af:A\to Af:A→A 如果满足以下条件: 存在常数 0≤q<10\le q<10≤q<1, 使得 ρ(f(a1),f(a2)≤ρ(a1,a2),∀a1,a2∈A...

    压缩映射不动点定理

    压缩映射

    A A A X X X 的子集,映射 f : A → A f:A\to A f:AA 如果满足以下条件:

    存在常数 0 ≤ q < 1 0\le q<1 0q<1, 使得 ρ ( f ( a 1 ) , f ( a 2 ) ≤ q ρ ( a 1 , a 2 ) , ∀ a 1 , a 2 ∈ A \rho(f(a_1),f(a_2)\le q\rho(a_1,a_2),\quad\forall a_1,a_2\in A ρ(f(a1),f(a2)qρ(a1,a2),a1,a2A

    则称为压缩映射

    压缩映射原理

    A A A 为完备度量空间 X X X 中的闭集, f : A → A f:A\to A f:AA 为压缩映射,则存在唯一的点 a ∈ A a\in A aA,使得 f ( a ) = a f(a)=a f(a)=a(不动点)

    证明

    任取 a 0 ∈ A a_0\in A a0A,递归的定义 A A A 中点列 { a n } \{a_n\} {an}如下:
    a n = f ( a n − 1 ) , n = 1 , 2 , ⋯ a_n=f(a_{n-1}),\quad n=1,2,\cdots an=f(an1),n=1,2,

    ρ ( a n + 1 , a n ) = ρ ( f ( a n ) − f ( a n − 1 ) ) ≤ q ρ ( a n , a n − 1 ) , ∀ n ≥ 1 \rho(a_{n+1},a_n)=\rho(f(a_n)-f(a_{n-1}))\le q\rho(a_n,a_{n-1}),\forall n\ge1 ρ(an+1,an)=ρ(f(an)f(an1))qρ(an,an1),n1
    从而有
    ρ ( a n + 1 , a n ) ≤ q ρ ( a n , a n − 1 ) ≤ q 2 ρ ( a n − 1 , a n − 2 ) ≤ ⋯ ≤ q n ρ ( a 1 , a 0 ) ρ ( a m , a n ) ≤ ρ ( a m , a m − 1 ) + ρ ( a m − 1 , a m − 2 ) + ⋯ + ρ ( a n + 1 , a n ) ≤ ( q m − 1 + q m − 2 + ⋯ + q n ) ρ ( a 1 , a 0 ) ≤ q n 1 − q ρ ( a 1 , a 0 ) → 0 , ( m > n , n → ∞ ) \begin{aligned} \rho(a_{n+1},a_n)&\leq q\rho(a_n,a_{n-1})\le q^2\rho(a_{n-1},a_{n-2})\le\cdots\le q^n\rho(a_1,a_0)\\ \rho(a_m,a_n)&\le\rho(a_m,a_{m-1})+\rho(a_{m-1},a_{m-2})+\cdots+\rho(a_{n+1},a_n)\\ &\le(q^{m-1}+q^{m-2}+\cdots+q^n)\rho(a_1,a_0)\\ &\le\frac{q^n}{1-q}\rho(a_1,a_0)\to0,(m>n,n\to\infty) \end{aligned} ρ(an+1,an)ρ(am,an)qρ(an,an1)q2ρ(an1,an2)qnρ(a1,a0)ρ(am,am1)+ρ(am1,am2)++ρ(an+1,an)(qm1+qm2++qn)ρ(a1,a0)1qqnρ(a1,a0)0,(m>n,n)
    这说明 { a n } \{a_n\} {an} 为 Cauchy 列. 设其极限为 a a a,则 a ∈ A a\in A aA,由三角不等式得
    ρ ( f ( a ) , a ) ≤ ρ ( f ( a ) , f ( a n ) ) + ρ ( f ( a n ) , a ) ≤ q ρ ( a , a n ) + ρ ( a n + 1 , a ) ≤ ε ( n → ∞ ) \begin{aligned} \rho(f(a),a)&\le\rho(f(a),f(a_n))+\rho(f(a_n),a)\\ &\le q\rho(a,a_n)+\rho(a_{n+1},a)\\ &\le \varepsilon\qquad(n\to\infty) \end{aligned} ρ(f(a),a)ρ(f(a),f(an))+ρ(f(an),a)qρ(a,an)+ρ(an+1,a)ε(n)
    这说明 f ( a ) = a f(a)=a f(a)=a
    唯一性:若 f ( b ) = b f(b)=b f(b)=b ,则
    ρ ( a , b ) = ρ ( f ( a ) , f ( b ) ) ≤ q ρ ( a , b ) \rho(a,b)=\rho(f(a),f(b))\le q\rho (a,b) ρ(a,b)=ρ(f(a),f(b))qρ(a,b)
    这说明 ρ ( a , b ) = 0 \rho(a,b)=0 ρ(a,b)=0 ,从而 a = b a=b a=b

    展开全文
  • 玩安卓必须要掌握的性能优化之APK极限压缩

    千次阅读 多人点赞 2020-02-21 22:15:08
    Apk的压缩很有必要,比如你的应用比你的竞争对手的要大很多,但是功能上都差不多,客户会怎么选择呢?就拿微信来说,如果微信不进行压缩的话,那么它的apk绝对比现在要大好几倍。微信不能不用,即使它变得特别大,...

    前言

    Apk的压缩很有必要,比如你的应用比你的竞争对手的要大很多,但是功能上都差不多,客户会怎么选择呢?就拿微信来说,如果微信不进行压缩的话,那么它的apk绝对比现在要大好几倍。微信不能不用,即使它变得特别大,咱们还是不得不用,但是咱们开发的软件,客户却有很多选择,所以,尽量使自己的app竞争力大一些。下面开始进入正文:

    第一步:将图片转为webp格式

    webp格式类似与jpeg、png,但是体积要远比jpeg和png小。下面是百度百科对webp的解释:

    WebP编码对于哈夫曼压缩性能更优异些,哈夫曼与WebP本质上都是从编码来解决图像压缩,哈夫曼是对rgb的元数据进行变频压缩而WebP编码是通过预测技术对图片压缩。

    WebP 压缩使用的图像编码方式与 VP8 视频编码对关键帧压缩方式相同,换句话解释:Google将视频编码技术搬到了图片上 形成了Webp编码格式。

    再详细不说了,就偏离主题了,今天的主题是apk的压缩,所以我们要做的就是---将我们应用中的png和jpeg图片全部转换成WebP格式的图片。

    你的内心可能要想:啊~我的项目中这么多图片,我该怎么去转啊。

    不要担心,你想的谷歌已经替你想好了,在Android Studio中一键就可以进行转换了,只需要将图片全选,然后点击右键,选择如下图的按钮即可:

    点击之后就进入了预览界面,你可以随意选择需要的质量,默认的是原图的75%。

    然后点击Finish即可完成,这里要提醒的是:

    1. 转换会默认把原图删除,请提前做好备份
    2. Android4.3之前无法识别WebP格式的图片,需要进行(libwebp库)编译

    不过现在的手机基本没有4.3以下的了,基本默认最低开发版本都是19(Android4.4)。但如果开发电视或者固定设备就必须进行兼容编译,这里就不详细说明了。

    第二步:去除多语言

    好多人没有注意过这一点,的确,这一步优化的效果可能不是特别大,但----蚊子再小也是肉啊!

    大家可以在Android Studio中打开自己的apk文件,找见resources.arsc,在下面找见string,如下图所示:

    AS默认将所有语言全部打包进入咱们的apk,但是咱们基本使用的只有中文和英语,默认是英语,所以无需配置,只需配置中文。

    那么,需要怎样配置呢?且听我娓娓道来:首先,打开moudle的build.gradle,在android中的defaultConfig里加入下面的代码即可:

    resConfigs "zh", "zh-rCN"

    配置了之后在进行打APK包就不会有那些乱七八糟的语言存在了。

    第三步:去除无用动态库

    千万要注意:这里说的是去除无用动态库,不是不使用动态库。动态库在咱们的项目中使用的非常多,比如使用三方地图服务:百度地图、高德地图、腾讯地图等等,都需要导入动态库,都会有几个不同的版本:armeabi、armeabi-v7a、x86、x86_64、mips等,而且每一个版本都很大,但目前市面上的手机有99%以上都是用的armeabi-v7a,咱们可以只保留armeabi-v7a的即可,大家如果不信的话可以解压市面上比较流行的APK,你会发现他们的包也都是只有armeabi和armeabi-v7a,包括微信、支付宝,所以咱们这么做也是没有问题的。

    这一步是减少应用体积最明显的,但具体该怎么做呢?很简单,还是在moudle的build.gradle中,还是上一步的位置:android中的defaultConfig中,修改以下代码即可:

    ndk {
           abiFilters 'armeabi'/*,'x86', 'armeabi-v7a'*/
                // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
        }

    简单说一下armeabi和armeabi-v7a的区别吧:armeabi和armeabi-v7a都表示cpu的类型,不同的cpu的特性不一样,armeabi就是针对普通的或旧的arm cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm cpu。

    第四步:移除无用资源

    我们的应用在开发过程中往往会有很多忘记清理的垃圾图片、布局或者其他资源,所以要进行清理,这也是APK极限压缩的一大步。有两种方式可以进行移除无用资源。

    第一种(不推荐):一键移除,如果出现使用动态id使用资源会出现问题(比如使用反射调用或者使用getIdentifier

    第二种(推荐):使用Android Studio自带的Lint工具,有人可能不知道Lint是什么,Lint 是Android Studio 提供的 代码扫描分析工具,它可以帮助我们发现代码结构/质量 问题,同时提供一些解决方案,而且这个过程不需要我们手写测试用例。下面是操作方式:

    然后输入unused resource

    然后点击回车进入选择Lint界面,可以选择是整个项目或者某个moudle:

    点击OK进入Lint详情界面

    在这个界面可以看到未使用的所有资源,进行判断是否有用之后即可进行清理。

    清理之后应用APK的大小又减小了一部分,接着来看下一步。

    第五步:开启混淆ProGuard

    这一步很关键,并不是为了减小APK的体积才开启的混淆,最主要是为了安全,如果你不想你的应用代码直接被别人很轻松的看到的话(当然混淆后也可通过某些技术进行查看,但起码会比不开启混淆要安全一些)

    混淆有三大作用:

    1、压缩:移除未被使用的类、属性、方法等,并且会在优化动作执行之后再次执行(因为优化后可能会再次暴露一些未被使用的类和成员。

    2、优化:优化字节码,并删除未使用的结构。

    3、混淆:将类名、属性名、方法名混淆为难以读懂的字母

    混淆开启的方式也很简单,还是在moudle的builg.gradle中,还是android中,不过这次不是defaultConfig中了,而是buildTypes中:

    buildTypes {
            release {
                minifyEnabled true // 开启混淆
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }

    我只在release包中开启了混淆,大家如果有需要也可以在debug中加上混淆。

    这样就完了?不不不,混淆没有这么简单,上面说到:混淆将类名、属性名、方法名混淆为了难懂的字母。这很好,可以保证安全的情况下又减小了APK的体积,但是-----如果你的项目中用到了反射呢?通过你的包名和类名找不到你的文件(因为雷鸣属性名已经改变),那么肯定会崩溃,不只是你的项目中自己写的代码,还有你所使用的三方库中如果也使用了反射的话也需要进行处理。

    那么问题来了,在哪里进行处理呢?上面的配置文件中其实已经写到了:proguard-rules.pro中,在里面需要写上不需要进行混淆的类或属性、或者是你的native方法也要注意加上。使用的三方库一般在Github介绍中会写明混淆需要添加的内容。在这里就,简单贴一段常用的混淆规则吧:

    # 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
    -optimizationpasses 5
    
    # 混合时不使用大小写混合,混合后的类名为小写
    -dontusemixedcaseclassnames
    
    # 指定不去忽略非公共库的类
    -dontskipnonpubliclibraryclasses
    
    # 这句话能够使我们的项目混淆后产生映射文件
    # 包含有类名->混淆后类名的映射关系
    -verbose
    
    # 指定不去忽略非公共库的类成员
    -dontskipnonpubliclibraryclassmembers
    
    # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
    -dontpreverify
    
    # 保留Annotation不混淆
    -keepattributes *Annotation*,InnerClasses
    
    # 避免混淆泛型
    -keepattributes Signature
    
    # 抛出异常时保留代码行号
    -keepattributes SourceFile,LineNumberTable
    
    # 指定混淆是采用的算法,后面的参数是一个过滤器
    # 这个过滤器是谷歌推荐的算法,一般不做更改
    -optimizations !code/simplification/cast,!field/*,!class/merging/*
    
    # 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
    # 因为这些子类都有可能被外部调用
    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Appliction
    -keep public class * extends android.app.Service
    -keep public class * extends android.content.BroadcastReceiver
    -keep public class * extends android.content.ContentProvider
    -keep public class * extends android.app.backup.BackupAgentHelper
    -keep public class * extends android.preference.Preference
    -keep public class * extends android.view.View
    -keep public class com.android.vending.licensing.ILicensingService
    
    # 保留support下的所有类及其内部类
    -keep class android.support.** {*;}
    
    # 保留继承的
    -keep public class * extends android.support.v4.**
    -keep public class * extends android.support.v7.**
    -keep public class * extends android.support.annotation.**
    
    # 保留R下面的资源
    -keep class **.R$* {*;}
    
    # 保留本地native方法不被混淆
    -keepclasseswithmembernames class * {
        native <methods>;
    }
    

    OK,混淆就说到这里,现在再进行打包的话你会发现应用APK的体积又减小了很大一部分。

    第六步:开启删除无用资源(和第四步的Lint不同)

    这一步很简单,只要在上一步混淆下面添加下面的一行代码即可:

    buildTypes {
            release {
                minifyEnabled true // 混淆
                shrinkResources true // 去除无用资源 与lint不同
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }

    需要注意的是,删除无用资源的配置必须在开启混淆下才有用,如果关闭混淆的话,那么这个配置即不起作用。

    第七步:AndResGuard微信资源压缩

    什么是AndResGuard呢?

    AndResGuard是一个缩小APK大小的工具,它的原理类似Java Proguard,但是只针对资源。它会将原本冗长的资源路径变短,例如将res/drawable/wechat变为r/d/a。

    那为什么要使用AndResGuard呢?

    在以往的开发中,我们通常只混淆了代码,资源文件却暴露在他人面前,res文件夹下所有文件名的可读性过强。微信的开源库AndResGuard 7zip压缩正好解决这种问题,对资源进行混淆,保护res资源文件的可读性,同时,可以减少APP的大小。一举两得的事情当然要干!

    首先需要在项目的build.gradle中的buildscript中的dependencies中加入以下配置:

     dependencies {
            classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.17'
        }

    然后在下面加上以下配置:

    buildscript {
        repositories {
            jcenter()
            google()
        }
        dependencies {
            classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.17'
        }
    }
    
    andResGuard {
        // mappingFile = file("./resource_mapping.txt")
        mappingFile = null
        use7zip = true
        useSign = true
        // It will keep the origin path of your resources when it's true
        keepRoot = false
        // If set, name column in arsc those need to proguard will be kept to this value
        fixedResName = "arg"
        // It will merge the duplicated resources, but don't rely on this feature too much.
        // it's always better to remove duplicated resource from repo
        mergeDuplicatedRes = true
        whiteList = [
            // your icon
            "R.drawable.icon",
            // for fabric
            "R.string.com.crashlytics.*",
            // for google-services
            "R.string.google_app_id",
            "R.string.gcm_defaultSenderId",
            "R.string.default_web_client_id",
            "R.string.ga_trackingId",
            "R.string.firebase_database_url",
            "R.string.google_api_key",
            "R.string.google_crash_reporting_api_key"
        ]
        compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.gif",
        ]
        sevenzip {
            artifact = 'com.tencent.mm:SevenZip:1.2.17'
            //path = "/usr/local/bin/7za"
        }
    }

    如果嫌放在这里有点乱的话可以新建一个配置文件放进去,这里就不赘述了。

    这里需要注意,如果你的项目中有软引用的话需要注明:例如上面的:R.drawable.icon。

    现在再打包,解压之后你会发现,你的资源文件和微信的类似,都变成了乱码。下面是压缩前后的对比图:

    到这里资源压缩就完成了。

    总结

    经过了上面七步的极限压缩,应用APK的大小肯定会有明显的减小,有的没做过APK压缩的甚至会比之前的小好几倍也是有可能的。本来只是想简单记录一下的,没想到写了这么久,这是性能优化我写的第二篇文章,上一篇是玩安卓必须要掌握的性能优化之内存泄漏。下一篇准备写一下平时开发中要注意的编码方式,希望大家能够喜欢。好了,就这样。

     

    展开全文
  • ZIP压缩算法原理解析(好文推荐,看完就懂)

    万次阅读 多人点赞 2019-05-28 16:08:02
    数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据压缩,两者本质上没啥区别,在数学家看来,都是映射。一方面在进行通信的时候,有必要将...
  • 1. 压缩原理deflate算法 a) LZ77 算法原理 b) Huffman算法原理 c) Huffman算法测试实例 2. gzip格式分析 3. zlib库函数API分析 4. zlib库实战(压缩和解压文件) 一、数据压缩原理 规则压缩:已知数据...
  • 分布式服务框架

    千次阅读 2016-01-29 10:42:11
    地改变已存在的key 映射关系,避免大量key 的重新映射。 consistent Hash 的原理是这样的,它将Hash 函数的值域空间组织成一个圆环,假设Hash 函数的值域空间为0~232-1(即Hash 值是一个32 位的无符号整型),...
  • 【JAVA面试】java面试题整理(3)

    千次阅读 2018-10-28 12:50:13
    9、 HashMap、Hashtable、ConcurrentHashMap的原理与区别 19           1. 讲下JAVA的运行时区域   回答:运行时数据区整体分为两类 线程私有和线程共享。   线程私有的包括:...
  • 压缩感知测量矩阵之有限等距性质(Restricted Isometry Property, RIP)_彬彬有礼的专栏-CSDN博客 约束等距性 | 机器之心 0 前情提要 0.1 数学模型和总体框图如下 给定输入信号X∈RN×1\boldsymbol{X} \in \mathbb{R...
  • 数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据压缩,两者本质上没啥区别,在数学家看来,都是映射。一方面在进行通信的时候,有必要将待传输...
  • [实验]无失真信源压缩编码

    千次阅读 2018-03-19 20:09:04
    实验一 无失真信源压缩编码此文系后续整理,懒得copy,对应的方法可以根据需要可以直接下载代码,附件:...
  • 原理是资源映射 资源映射前.jpg 资源映射后.jpg 集成后大小大概减少了1MB 使用webp图片 转换成webp webp转换.jpg SVG矢量图替换套图 (只针对小图标...
  • 几种压缩算法

    千次阅读 2013-07-19 13:18:41
    一、 行程长度压缩  原理是将一扫描行中的颜色值相同的相邻像素用一个计数值和那些像素的颜色值来代替。... 1.PCX行程压缩方法: 该算法实际上是位映射格式到压缩格式的转换算法,该算法对于连续 出现1次的字节
  • 摘要 获取项目源文件,联系Q:1415736481,可指导...近年来出现的压缩感知理论(Compressed Sensing,CS)则不受制于奈奎斯特采样定律,它是采用非自适应线性投影来保持信号的原始结构,以直接采集压缩后的数据的方式...
  • 我们假设收敛值不是唯一的,并且x1*和x2 *是压缩映射序列收敛的两个值,那么我们会有: x1 *和x2 *是最优值,压缩映射已在这两点收敛,距离不再会变。此外,注意到f是压缩映射,因此必须具有以下性质: 现在,由于γ...
  • 采用Banach不动点原理,分析ECM法计算下限极限载荷时存在的收敛性问题,指出只有在弹性模量迭代序列满足压缩映射条件时,才能得到极限载荷的较好逼近值,从而提出复杂结构极限分析的修正弹性补偿法(KtECM)。...
  • (压缩映射原理(Contraction Mapping Principle))令 T : ℓ b ( A , R m ) → ℓ b ( A , R m ) T:\ell_b(A,R^m)\to\ell_b(A,R^m) 是一个给定的映射,且满足存在一个常数 λ , 0 ≤ λ < 1 \lambda,0\leq\lambda ...
  • Redis 原理

    2021-09-03 09:50:54
    1、发布订阅模式 1.1 列表的局限 通过队列的 rpush 和 lpop 可以实现消息队列(队尾进队头出),但是消费者需要不停地调用 lpop 查看 List 中是否有等待处理的消息(比如写一个 while 循环)。 为了减少通信的消耗,可以...
  • 基于极限学习机的自编码器(ELM-AE) 文章目录基于极限学习机的自编码器(ELM-AE)1.算法原理2.算法实验2.1 利用ELM-AE对单维数据进行自编码2.2 利用ELM-AE对图像进行编码与还原3.参考文献4.Matlab代码 1.算法原理 ELM...
  • 神经网络压缩 (总结6)

    千次阅读 2019-05-15 19:07:10
    神经网络压缩 1.1神经网络压缩的必要性与可能性 深度学习的实际应用往往受限于其存储和运算规模。例如,VGG-16网络含有约1.4亿浮点数参数,假设每个参数存储为32位浮点数格式,则整个网络需要占用超过500兆存储空间...
  • JPEG中使用了量化、哈夫曼编码等,极大的压缩了图片占用的空间,那么是否可以进一步压缩呢? 从技术角度讲,是可以的。如DropBox开源的lepton,在目前的JPEG压缩基础上,可以再节省22%左右的空间。 lepton中使用算术...
  • 图像压缩之算术编码

    千次阅读 2019-04-15 10:43:15
    JPEG中使用了量化、哈夫曼编码等,极大的压缩了图片占用的空间,那么是否可以进一步压缩呢? 从技术角度讲,是可以的。如DropBox开源的lepton,在目前的JPEG压缩基础上,可以再节省22%左右的空间。 lepton中使用算术...
  • 随着智能终端的多样化,5G带来的大连接、低时延、高吞吐,以及异构硬件设备的繁荣发展,我们正在逐步进入万物互联的智能世界,覆盖所有场景的单一操作系统已经很难发挥出硬件的处理能力并满足应用越来越高的极限需求...
  • 文件压缩算法详细分析(ZIP)及解压实例解释

    万次阅读 多人点赞 2017-12-27 14:59:46
    数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据压缩,两者本质上没啥区别,在数学家看来,都是映射。一方面在进行通信的时候,有必要将待传
  • Java HashMap 原理

    2015-10-14 09:11:01
    这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不 同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的...
  • 数字媒体技术揭秘四、压缩技术4.1 理论基础廿世纪中叶,为了从理论上证明对信息系统进行优化的可行性,Shannon引入了熵的概念,用来表示信息的不确定性,熵越大,信息的不确定性就越大[4],而信息的不确定性越大,其...
  • 图像压缩-从DCT到小波: 纵览

    千次阅读 2013-02-07 19:30:09
    引言未经压缩的多媒体(图形,音频,视频)数据要求很大的存储容量和传输带宽。尽管大容量存储器,处理器速度,和数字通信系统在快速进步,但对数据存储容量和数据通信的需求仍然超越当前技术。近来兴起的数据密集的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,381
精华内容 1,352
关键字:

压缩映射原理求极限