用户
 找回密码
 注册

扫一扫,访问微社区

搜索
2014-4-16 23:24:26 大叔爱读书 分区版主 1# 20621927
Onyx淘宝旗舰店:
本帖最后由 大叔爱读书 于 2014-4-17 08:28 编辑
2 S) l5 I7 `: u( l& _, v' H3 A1 }6 C& l9 c2 o2 I
目前只有少部分阅读应用有E-INK支持选项,另一些较专业的阅读软件也为E-INK做了优化,但其他类型的软件一般为传统液晶屏设计,在E-INK屏设备上效果不好,甚至无法运行,这时就需要对其“漂白”了。
( O; o1 L4 j$ T" y$ p5 d1 @有人说E-INK设备颜色种类比较少,效果是不是很差?因为E-INK和液晶的类型不同无法对比,非要举个例子那可以参考纸质书和液晶的区别,通常纸质书是用黑色打印机打印的并无灰阶
% V7 Y: L; k. \( C现在开始对一些不爱"淡装"的应用漂白漂白吧 :D “漂白”大致包含以下步骤:4 ]! Z( e# Y2 I, P5 g$ y. H/ d
1、修改应用的xml文件,让文字更清晰等; D% d4 V& [5 C* v) X# x( U& @# C
2、给应用的图片去色,看着顺眼: E! e2 y( m, ^, S$ V% }
3、修改隐藏在代码中的配色特效等3 [( x. G1 U0 V. c$ L- U
本文主要讨论用命令自动完成前两个步骤的方法。
7 m! y) u7 n; v5 v9 f  r以下以Ubuntu12.04下操作为例,用到的所有软件都跨平台,不同系统方法大同小异* j$ v9 Y: B3 H7 o$ Z( {
需要的环境和软件:java、apktool.jar、signapk.jar、xmlstarlet、imagemagick
! I8 P8 g% p$ Y3 X$ Z安装环境和软件:
  1. sudo apt-get update 3 L+ S/ g2 n- ?: p% t
  2. sudo apt-get openjdk-6-jre, j6 a  w/ |& ^, l4 Q% D# f9 m% N1 O
  3. sudo apt-get install xmlstarlet* R. Q1 X$ F$ }
  4. sudo apt-get install imagemagick
复制代码
apktool.jar和signapk.jar请自行谷歌下载或用附件的apk.zip9 T! [' |3 o* D! g7 \
1、先解压apk文件(注:请勿逆向/修改有版权软件,需获得著作者的许可)/ r/ l  q* R! J. [! [' ^5 j
java -jar /home/xxx/apktool/apktool.jar d myapk.apk+ k9 ~# _9 J- q  m6 @

" E! s  M1 y) J% b1 v2 T2、imagemagick实在是太强大了,只要用其中一个命令convert的一点点功能就可以实现自动漂白。  q# K) {$ p7 R6 ~( A  ]2 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 {}
复制代码
这样所有图片秒白了1 h9 P+ C7 H- q: ]
附秒白效果:
( ]+ ?0 N! l% b% D* Z5 m
游客,如果您要查看本帖隐藏内容请回复

# y; k; W3 p& a1 q0 ~
! G; k) H' C' H/ I" E5 [! n( y2 |3、xmlstarlet是非常强大的跨平台xml文档处理器,注意有些系统下装了xmlstarlet后命令名为xml' q. H& r/ |% s2 r4 l  `0 m
可以把android常用的组件、属性和值预先输入到一个xml.txt里,然后自动以xml.txt中的值搜索xml并升级里面的组件属性
1 p3 P2 n0 I8 M4 l2 Qxml.txt的内容例子:
% W2 E- y& J$ C5 U) f: L! i8 N6 j|TextView|android:textColor|#ff000000|
8 g2 A, h0 w- k6 n|TextView|android:shadowColor|#ffffffff|
2 H+ M5 l- N- e* e4 k, f|TextView|android:background|#ffffffff|
+ D9 ^7 ], _. E: t  ?/ c' i|application|android:theme|@android:style\/Theme.Light|
$ G: @" \: r' R6 w|activity|android:theme|@android:style\/Theme.Light|3 t. l5 j( x4 V
因为是安行处理,所以xml.txt里不要留空行,这里仅列出了少量属性,可以自行添加更多组件,可以到andorid.com查询,有些属性是继承下来的5 ^4 \: P5 t% ^& g, k4 W8 n
然后就可以用while read line读取每一行,并把目标xml里的值改成自己定义的,或者删除已经存在的属性并重新添加所有属性,我用后者。
. u6 r1 u6 ^1 S+ W4 H7 u搜索~/myapk下 内容包含当前组件名 的xml文件,并自动升级指定的值的代码例子:
  1. while read line;2 Q9 {6 f- M. p, M6 m& c/ ~( `
  2. do
    ! F, a+ N9 H& ^( P: |) X" [# |8 g
  3. n=`echo $line | cut -f2 -d"|"`;
    ) @- h* j. V  K* }7 k& m4 D. I/ C
  4. a=`echo $line | cut -f3 -d"|"`;" A4 k0 L+ V! ~! Y& t' k
  5. v=`echo $line | cut -f4 -d"|"`;
    4 E* h5 N- p% ~8 O
  6. find ~/myapk -iname "*.xml" | xargs grep -l "$n" | xargs xmlstarlet ed -L -d //$n/@$a ;- b) Z  p7 z( x9 w2 O' T0 m6 H+ `
  7. find ~/myapk -iname "*.xml" | xargs grep -l "$n" | xargs xmlstarlet ed -L -a //$n -t attr -n "$a" -v "$v";0 R/ @/ j$ Y( V% Q8 k
  8. done < xml.txt
复制代码
其中第6行是用ed(edit)模式删除当前属性,第7行是增加当前属性并赋值, `# Q  h. r/ {  C; `- q
#ff000000中ff表示不透明,后面的0表示RGB值,比如#ff777777是灰色
9 }- ]1 `  a+ e+ n7 P
6 _9 n3 v+ O2 z4、修改代码中文字颜色和动画比较复杂。
  m( w4 [- }; V( J2 f5 D# M5 H找出包含setTextColor之类的文字的文件修改之:
  1. find myapk -name "*.smali" | xargs grep -l "setTextColor" | xargs gedit
复制代码
setTextColor那行如果是类似:' m3 v/ O5 i  ]; e1 U; }
invoke-virtual{v7,v8},Landroid/widget/TextView;->setTextColor(I)V
8 S( P( m/ ^- G2 }* i则在其上面增一行定义颜色常量(绿字要一样):
. ~% m9 p% N" F# N& S, I8 ^const v8,0xff000000
5 n" M6 _) ^7 n5 y这样保存就可以了,另外:
0 X# y& Y& z: i# b* V* N5 vsmali中颜色值如-0x1表示白色可以这么理解:- U- N/ K& a" n* f$ c
0xFFFFFFFF + 0x1 = 0x100000000 这在32位寄存器中溢出,实际值成了0x00000000(透明黑色了)
1 y3 E. p9 R* |( a. M7 |同理 0x00000000 -0x1 = 0xFFFFFFFF(不透明白色)$ @) c4 u  o% m1 ?( M3 d
另外const/high16 v6,-0x100中
$ z. B/ p: E1 d高位-0x100=-0x1000000=0xFF000000(不透明黑色)
9 R6 P3 i9 c. w  N! C9 m# `# H; p9 H0 a: q
最后打包签名就可以了,安卓apk应用签名是为了保护官方软件不被第三方修改,这里的签名和软件官方的不同,不能覆盖安装。6 T% w1 ~" Z7 ^& _) ~5 H& v
需要回帖的内容都是非必须的,总要给大力支持俺的朋友点不同的哈,喜欢本文的话可以点以下链接给俺增点积分 :D
; z- s1 N1 m7 r/ chttp://bbs.onyx-international.com.cn/?fromuid=51549
, I( h  Y6 X/ l% o2 t3 |" C# a以上说明文字太多比较杂乱,整理一下完整代码还是非常简洁清晰的,如下:0 T3 a  \- U$ P

2 Y% }! S/ P  s: ^$ i
游客,如果您要查看本帖隐藏内容请回复
* E6 o1 j# v' K9 s

. X" Z) p* V3 d) d3 b* d2 n  R! F' t- x! y9 R' Q
附一个被漂白的应用:
% o0 L9 f7 _0 X* X! i8 \
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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版本吧
您需要登录后才可以回帖 登录 | 注册