1. 程式人生 > >修改apk必讀-反編譯後的資料夾詳解

修改apk必讀-反編譯後的資料夾詳解

反編譯apk得到的幾個檔案和資料夾
1。 assets 資料夾
此資料夾可以存放資原始檔。至於是神馬資原始檔,怎麼讀取,這些我們就不用深究了,因為不常改。
2。 res 資料夾
主要用來存放資源。此資料夾下可以建立子檔案,常見的有:
anim 動畫
drawable 圖片
color 顏色
menu 選單
layout 佈局
values 常量值
xml 任意xml檔案
我們修改apk時,一般就在這裡修改。比如漢化,改名稱,去廣告,改字型顏色,大小神馬的。
3。smali
裡面主要是dex檔案反編譯得到的smali檔案。不會java的改不起。頂多搜幾個關鍵詞漢化一下。值得注意的是,漢化時不能直接輸入漢字,而應輸入對應的十六進位制程式碼。

4。AndroidManifest.xml
此檔案是apk中最重要的檔案之一。它是apk的全域性配置檔案,提供了android系統所需要的關於該應用的必要資訊。

res目錄淺說:
1 anim資料夾
    字尾名為.xml。動畫檔案都放在這裡。
2 drawable資料夾
用於存放圖片資源,圖片或者xml。
(1) 圖片
圖片格式:png,9.png,jpg,gif。
注意:9.png是一種特殊的png格式,與一般的png格式有區別!很多人在改完圖片後將兩種格式混淆,導致回編譯失敗。後面有製作9.png格式圖片的方法。
(2) xml
xml檔案通常為自定義的形狀shape或圖片選擇器類selector似的東西,就是不同狀態下不同的圖片,用於設定background什麼的。

(3) drawable資料夾為了對螢幕的適配,
①對解析度籠統的分:名字可以為:drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdp
drawable-nodpi
drawable-tvdpi
解析度依次由高到低
②具體到某一解析度:drawable-解析度,比如:drawable-1280x720
③如果有橫豎屏的區別,則命名為:drawable-land/port-mdpi,
3 color資料夾
用於存放color列表,和drawable的xml一樣,表示不同狀態下的不同顏色
4 menu資料夾
選單資原始檔夾。
5 layout資料夾
佈局資料夾。此資料夾的名字也是可以起到螢幕適配的功能的。

①橫豎屏:layout-land/port
②解析度:layout-1280x720
6 values資料夾
存放常量值的資料夾。裡面常見的xml檔案為:
arrays.xml :  資源陣列.
colors.xml :   顏色值
dimens.xml :  畫素值.
strings.xml : 字串值.
styles.xml :  樣式值.
此資料夾,也有螢幕適配作用。比如:dimens在不同解析度下的值。同樣的是加-1280x720這樣的字尾。
對於strings,values資料夾有各種語言的版本對應。預設為英文。中文的資料夾名字應該是:
values-zh-rCN 簡體中文
values-zh-rTW 繁體中文
7 raw資料夾
存放不需要系統編譯成二進位制的檔案,例如字型檔案等,同assets資料夾類似。
8 xml資料夾
存放任意的xml檔案。具體看名字。

改apk時,我們主要改兩種,即圖片和xml。先講圖片:
改圖片最簡單了,注意好格式,解析度即可。但有一點需注意,就是9.png和png格式圖片的區別。許多人沒注意這點,導致回編譯總是失敗。下面講9.png格式圖片的製作。
1 介紹 9patch
NinePatch.圖片以*.9.png結尾,和普通圖片的區別是四周多了一個邊框
左邊那條黑色線代表圖片垂直拉伸的區域,上邊的那條黑色線代表水平拉伸區域,右邊的黑色線代表內容繪製的垂直區域,下邊的黑色線代表內容繪製的水平區域,右邊和下邊的線是可選的,左邊和上邊的線不能省略。
採用NinePatch.圖片做背景,可使背景隨著內容的拉伸(縮小)而拉伸(縮小)
總之,通俗的將,9patch格式的圖片就是有些部位能伸縮,有些部位不能的特殊png格式圖片。
2 將png轉化為9.png步驟如下
第一步,下載9妹工具,一樓工具包裡有,雙擊開啟draw9patch.bat,將圖片拖到軟體介面編輯。
第二步,勾選軟體下面的三個選項,全選就對了。
第三步,把滑鼠放到圖片中央,此時你會看到圖片四周有1畫素的透明帶
第四步,在左邊和上邊的透明帶上各畫一條黑線(滑鼠拖動即可)
注意:當圖片過大時上邊的透明帶會被黃色的提示框遮住,此時只能多點選黃色區域自己摸索透明帶的位置。
第五步,儲存,這個不用多說吧。
至此,將圖片替換回原來的資料夾即可。需要注意的是,剛編輯的9patch.圖片不能直接拖到原apk中,而應回編譯後再替換進去。

再說修改xml。改字型,軟體全域性背景,漢化,去廣告神馬的都通過這種方式。我們常改的是layout,drawable,values目錄下的xml檔案,如果要改桌面外掛,要去xml資料夾中修改。必要時也可嘗試修改AndroidManifest.xml。下面是常見程式碼(分類非標準)
1 引用(@)
1)引用自定義的資源
形式 @[package:]type/name
如 android:text="@string/hello"
這裡使用"@"字首引入對一個資源的引用,後面的string/hello就是我們自定義的資源。
2) 引用系統資源
形式 @android:type/name
如 android:textColor="@android:color/opaque_red" 指定package:android
3) 引用主題屬性
形式 ?android:type/name
即引用當前主題中的屬性的值。
2 文字(text)
textColor 文字顏色
textColorHighlight 被選中文字的底色,預設為藍色
textColorHint 提示資訊文字的顏色,預設為灰色。與hint一起使用
textColorLink 文字連結的顏色
textScaleX 設定文字之間間隔,預設為1.0f
textSize 文字大小
textStyle 字形
typeface 文字字型
height 文字區域的高度
maxHeight 文字區域的最大高度
width 文字區域的寬度
lines 文字的行數
3 檢視(view)
background 背景色/背景圖片(@null 透明)
clickable 是否響應點選事件
focusable 是否獲得焦點
minHeight 檢視最小高度 
minWidth 檢視最小寬度
padding 上下左右的邊距
scrollbar 滾動條(none 隱藏,horizontal 水平,vertical 垂直)
tag 文字標籤
visibility 是否顯示View(visible 預設值,顯示;invisible 不顯示,但是仍然佔用空間;gone 不顯示,不佔用空間)
4 佈局(layout)
LinearLayout 線性佈局
FrameLayout 單幀佈局
RelativeLayout 相對佈局
AbsoluteLayout 絕對佈局
TableLayout 表格佈局
layout_width 寬度
layout_height 高度
fill_patent 佈滿螢幕
wrap_content 適合大小
foreground 前景
background 背景
gravity 位置(center_vertical 居中;top 頂部,預設;bottom 底部)
orientation 定向(horizontal 水平,vertical 垂直)
5 主題(theme)
Theme.Dialog 對話方塊模式
Theme.NoTitleBar 無標題欄
Theme.NoTitleBar.Fullscreen 無標題欄,全屏
Theme.Light 白色背景
Theme.Light.NoTitleBar 白色背景,無標題欄
Theme.Light.NoTitleBar.Fullscreen 白色背景,無標題欄,全屏
Theme.Black 黑色背景
Theme.Black.NoTitleBar 黑色背景並,無標題欄
Theme.Black.NoTitleBar.Fullscreen 黑色背景,無標題欄,全屏
Theme.Wallpaper 桌面背景
Theme.Wallpaper.NoTitleBar 桌面背景,無標題欄
Theme.Wallpaper.NoTitleBar.Fullscreen 桌面背景,無標題欄,全屏
Theme.Translucent 半透明效果
Theme.Translucent.NoTitleBar 半透明,無標題欄
Theme.Translucent.NoTitleBar.Fullscreen 半透明效果,無標題欄,全屏
Theme.Panel 面板風格顯示
Theme.Light.Panel 平板風格顯示
6 顏色(color)
1) @color/×× 引用自定義的顏色,一般在res/values/colors.xml中
2) @android:color/×× 引用系統顏色
3) #×××××××× #後一共8個字元,由0~9,a~f組成。前兩位是透明度,00表示全透明,ff表示不透明。後6位是RRGGBB,R紅G綠B藍,000000為白,ffffff為黑
7 單位
px 畫素點
in 英寸
mm 毫米
pt 磅,1/72 英寸
dp 一個基於density的抽象單位,如果一個160dpi的螢幕,1dp=1px
dip 等同於dp
sp 同dp相似,但還會根據使用者的字型大小偏好來縮放。
注意:sp一般是文字的單位,dip最常用