用户
 找回密码
 注册

扫一扫,访问微社区

搜索
2014-4-16 23:24:26 大叔爱读书 分区版主 1# 20619652
Onyx淘宝旗舰店:
本帖最后由 大叔爱读书 于 2014-4-17 08:28 编辑 ( a+ h! o& A; k# d  Q

2 R" k% z% S% p目前只有少部分阅读应用有E-INK支持选项,另一些较专业的阅读软件也为E-INK做了优化,但其他类型的软件一般为传统液晶屏设计,在E-INK屏设备上效果不好,甚至无法运行,这时就需要对其“漂白”了。
% Y- o3 I* Q* r4 @/ G1 e% V6 Y有人说E-INK设备颜色种类比较少,效果是不是很差?因为E-INK和液晶的类型不同无法对比,非要举个例子那可以参考纸质书和液晶的区别,通常纸质书是用黑色打印机打印的并无灰阶/ ^* T3 V+ Y( D" s4 F5 ~! a
现在开始对一些不爱"淡装"的应用漂白漂白吧 :D “漂白”大致包含以下步骤:) L8 I% j, ?' ^! b. F7 w
1、修改应用的xml文件,让文字更清晰等5 ]) s! `) \5 ^& j
2、给应用的图片去色,看着顺眼
' o8 O! g" \9 x4 H3、修改隐藏在代码中的配色特效等
& N& F5 \1 f) m$ ~" c本文主要讨论用命令自动完成前两个步骤的方法。6 y1 j$ A5 |. P0 A( p% z# Q
以下以Ubuntu12.04下操作为例,用到的所有软件都跨平台,不同系统方法大同小异
: k/ |' f; `- W) u需要的环境和软件:java、apktool.jar、signapk.jar、xmlstarlet、imagemagick
# T9 `4 x  Q+ b; U( [1 i7 h安装环境和软件:
  1. sudo apt-get update / T; j1 B) b$ a8 X& j
  2. sudo apt-get openjdk-6-jre
    / u$ {# K: w2 u
  3. sudo apt-get install xmlstarlet
    % i8 ~9 F1 G1 r5 w7 M0 N( w5 L* n4 m- ?
  4. sudo apt-get install imagemagick
复制代码
apktool.jar和signapk.jar请自行谷歌下载或用附件的apk.zip
8 Q' v1 t6 x: Y# a# B$ ]/ ?- p: T1、先解压apk文件(注:请勿逆向/修改有版权软件,需获得著作者的许可)
" A, v; S5 v- i" _$ Q- x0 _* ajava -jar /home/xxx/apktool/apktool.jar d myapk.apk: J# x1 a+ X$ k1 m: z; p2 m& Y

  @8 t* }' K4 @# N) j1 F7 p9 a7 {2、imagemagick实在是太强大了,只要用其中一个命令convert的一点点功能就可以实现自动漂白。5 l% f0 F# R2 R$ D/ N4 l, ]$ L
比如提高对比度:
  1. convert in.png -contrast out.png
复制代码
自动色阶:
  1. convert in.png -auto-level out.png
复制代码
转为灰度:
  1. convert in.png -colorspace GRAY out.png
复制代码
替换颜色(把很白部分加深,以避免在白色背景中无法识别,但我试了轻轻改效果一般,加大力度又变难看):
  1. convert in.png -fuzz 10% -fill "rgb(255,255,255)" -opaque "rgb(210,210,210)" out.png
复制代码
以上命令可以写在一个里面,一个参数可以叠加使用,加上用find查找图片并自动用以上效果处理图片就是:
  1. find ~/myapk -iname "*.png" -o -iname "*.jpg" | xargs -i convert {} -auto-level -contrast -fuzz 10% -fill "rgb(255,255,255)" -opaque "rgb(210,210,210)" -colorspace GRAY {}
复制代码
这样所有图片秒白了4 b0 U% Z, J" R
附秒白效果:
3 V& Z# Q7 o; X% K3 P5 @4 {) |2 J9 H! \
游客,如果您要查看本帖隐藏内容请回复

% |2 h* z% ^' _9 A
2 W, w; o  A, S- c1 s0 q0 x3、xmlstarlet是非常强大的跨平台xml文档处理器,注意有些系统下装了xmlstarlet后命令名为xml! I  Q3 H4 m2 H, j. |
可以把android常用的组件、属性和值预先输入到一个xml.txt里,然后自动以xml.txt中的值搜索xml并升级里面的组件属性9 l+ y) {7 @9 A9 X' @
xml.txt的内容例子:
, G7 b" A  `( @- m. M) r" ~1 }|TextView|android:textColor|#ff000000|- ~5 r0 z) \. C% _
|TextView|android:shadowColor|#ffffffff|
- j/ B% n$ a/ ?$ v( W) J|TextView|android:background|#ffffffff|
. @0 p* ]4 V: C( C- B|application|android:theme|@android:style\/Theme.Light|
4 R& b# i. {0 }8 h& E. C|activity|android:theme|@android:style\/Theme.Light|1 M. I" p: u1 U% B7 w
因为是安行处理,所以xml.txt里不要留空行,这里仅列出了少量属性,可以自行添加更多组件,可以到andorid.com查询,有些属性是继承下来的
: ^1 f" I7 f1 A3 d3 q( r! w然后就可以用while read line读取每一行,并把目标xml里的值改成自己定义的,或者删除已经存在的属性并重新添加所有属性,我用后者。
" ]7 F8 [' V7 h' j; x) E搜索~/myapk下 内容包含当前组件名 的xml文件,并自动升级指定的值的代码例子:
  1. while read line;
    - k4 I7 L' d& [% S4 c3 |
  2. do
    1 j( R8 C; @$ |/ l
  3. n=`echo $line | cut -f2 -d"|"`;
    3 Y7 N; w2 ?. H5 M& W* j% k% B
  4. a=`echo $line | cut -f3 -d"|"`;
    - W& a5 s# A( o+ }
  5. v=`echo $line | cut -f4 -d"|"`;
    / v( O- w3 d# V& ~# ~
  6. find ~/myapk -iname "*.xml" | xargs grep -l "$n" | xargs xmlstarlet ed -L -d //$n/@$a ;
    7 m) d! J. Y! k7 Q
  7. find ~/myapk -iname "*.xml" | xargs grep -l "$n" | xargs xmlstarlet ed -L -a //$n -t attr -n "$a" -v "$v";
    2 p. h4 Q8 \$ d& V; L$ ~7 {
  8. done < xml.txt
复制代码
其中第6行是用ed(edit)模式删除当前属性,第7行是增加当前属性并赋值
4 D1 o5 x% q: I: D' K$ X  m! w& C3 X#ff000000中ff表示不透明,后面的0表示RGB值,比如#ff777777是灰色
* {& N- T0 W, a* q5 n$ G& D
: J8 Z5 c9 B1 R1 q4、修改代码中文字颜色和动画比较复杂。
5 J! n9 S0 P) f$ A1 g6 v找出包含setTextColor之类的文字的文件修改之:
  1. find myapk -name "*.smali" | xargs grep -l "setTextColor" | xargs gedit
复制代码
setTextColor那行如果是类似:
; P) s) a  P: [+ _! `invoke-virtual{v7,v8},Landroid/widget/TextView;->setTextColor(I)V( o" i# e: T2 u0 }
则在其上面增一行定义颜色常量(绿字要一样):
  u0 A4 j: Y. O1 W$ uconst v8,0xff0000009 u& ~8 v! _4 e' g1 L% X
这样保存就可以了,另外:
/ M; m6 K9 Z3 [) I0 M3 }2 rsmali中颜色值如-0x1表示白色可以这么理解:
: B( S/ {6 A  Q- O0xFFFFFFFF + 0x1 = 0x100000000 这在32位寄存器中溢出,实际值成了0x00000000(透明黑色了)
" l2 X- S- q& \* _同理 0x00000000 -0x1 = 0xFFFFFFFF(不透明白色)
/ ]% r" z7 \9 x1 W另外const/high16 v6,-0x100中; v7 d$ i, C/ T! \5 n
高位-0x100=-0x1000000=0xFF000000(不透明黑色)
& S; U+ u: Z6 L% M- p
  U0 }3 o7 D, G% t4 ]6 V4 o' g最后打包签名就可以了,安卓apk应用签名是为了保护官方软件不被第三方修改,这里的签名和软件官方的不同,不能覆盖安装。4 ]% M  x# }; U
需要回帖的内容都是非必须的,总要给大力支持俺的朋友点不同的哈,喜欢本文的话可以点以下链接给俺增点积分 :D
& G1 ^# c8 G1 E7 L9 r  Shttp://bbs.onyx-international.com.cn/?fromuid=51549
& n: v* A$ z8 D9 t) U以上说明文字太多比较杂乱,整理一下完整代码还是非常简洁清晰的,如下:
( D7 Z- m3 C: J. _: w* i
3 {/ E9 S3 w2 N$ @; B6 }6 _3 z* R
游客,如果您要查看本帖隐藏内容请回复
4 i2 o% X3 f8 ~4 E" _
( b5 H. X( Y* k5 _+ _% h
: W1 ?2 ?- t* ~  F% |: r. v) ]; t
附一个被漂白的应用:7 Z: k7 e& \( w9 F
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1RP +1 支持 +1 收起 理由
星空和阳光 + 1 + 1 求布卡漂白,论坛最新那个不能安装

查看全部评分

先学习·再实验吧···
Onyx淘宝旗舰店:
学习中。
2014-4-17 08:14:56 znq 后起之秀
4#
谢谢
感谢支持,注意文中xml.txt的格式 theme那里的"/"要用"\/"表示,我已更新。现在处理xml.txt中后两行貌似还不怎么好,可以删除这两行,自行修改AndroidManifest.xml,一个文件改改也快的
2014-4-17 08:53:39 2710 来自手机 分区版主
6#
很好的教程,受教了。
很高深的帖子,坚决要挺
太强大了,呼唤程序猿来围观
看看是什么?
xian bao le ge chun
2014-4-17 23:53:20 Roman VIP Member
11#
收藏备用,谢谢!
学习一下。
2014-4-30 07:34:05 gta VIP Member
14#
不错,下来看看再评论。
但愿能用
很不错的样子,学习了。。。。
这个需要慢慢学习啊
学习一下。
还有点小复杂,研究一下
2014-6-13 22:02:40 大叔爱读书 来自手机 分区版主
20#
文中所用的apktool版本比较老了,大家自行搜索下载2.0版本吧
您需要登录后才可以回帖 登录 | 注册