亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android APK反編譯圖文教程

 更新時間:2016年04月15日 11:21:57   作者:vipra  
學會反編譯比較關鍵,也是我們美化必須掌握技術,學會反編譯也是實現制作ROM的起步,ROM高手必然是反編譯高手這里有必要說一下,教程只是給你一個動手的那一個蹺板,教程不是萬能的,給了你基礎與啟發(fā),最重要的是我們能夠自主的進行創(chuàng)新與思考

在學習Android開發(fā)的過程你,你往往會去借鑒別人的應用是怎么開發(fā)的,那些漂亮的動畫和精致的布局可能會讓你愛不釋手,作為一個開發(fā)者,你可能會很想知道這些效果界面是怎么去實現的,這時,你便可以對改應用的APK進行反編譯查看。下面是我參考了一些文章后簡單的教程詳解。

(注:反編譯不是讓各位開發(fā)者去對一個應用破解搞重裝什么的,主要目的是為了促進開發(fā)者學習,借鑒好的代碼,提升自我開發(fā)水平。)

測試環(huán)境:

        win 7 

使用工具:

     腳本之家下載地址:

       apktool (資源文件獲取)  下載  

       dex2jar(源碼文件獲?。?nbsp;下載

       jd-gui  (源碼查看) 下載

     官方最新版本下載地址:

       apktool(google code)

  dex2jar(google code)  

   jd-gui(google code)最新版請見官方

工具介紹:

apktool  

     作用:資源文件獲取,可以提取出圖片文件和布局文件進行使用查看

dex2jar

     作用:將apk反編譯成java源碼(classes.dex轉化成jar文件)

jd-gui

     作用:查看APK中classes.dex轉化成出的jar文件,即源碼文件

反編譯流程:

一、apk反編譯得到程序的源代碼、圖片、XML配置、語言資源等文件

下載上述工具中的apktool,解壓得到3個文件:aapt.exe,apktool.bat,apktool.jar ,將需要反編譯的APK文件放到該目錄下,

打開命令行界面(運行-CMD) ,定位到apktool文件夾,輸入以下命令:apktool.bat d -f  test.apk  test    


(命令中test.apk指的是要反編譯的APK文件全名,test為反編譯后資源文件存放的目錄名稱,即為:apktool.bat   d  -f    [apk文件 ]   [輸出文件夾])

說明獲取成功,之后發(fā)現在文件夾下多了個test文件,點擊便可以查看該應用的所有資源文件了。

如果你想將反編譯完的文件重新打包成apk,那你可以:輸入apktool.bat   b    test(你編譯出來文件夾)便可,效果如下:


之后在之前的test文件下便可以發(fā)現多了2個文件夾:

build

dist(里面存放著打包出來的APK文件)

二、Apk反編譯得到Java源代碼

下載上述工具中的dex2jar和jd-gui ,解壓

將要反編譯的APK后綴名改為.rar或則 .zip,并解壓,得到其中的額classes.dex文件(它就是java文件編譯再通過dx工具打包而成的),將獲取到的classes.dex放到之前解壓出來的工具dex2jar-0.0.9.15 文件夾內,

在命令行下定位到dex2jar.bat所在目錄,輸入dex2jar.bat   classes.dex,效果如下:

在改目錄下會生成一個classes_dex2jar.jar的文件,然后打開工具jd-gui文件夾里的jd-gui.exe,之后用該工具打開之前生成的classes_dex2jar.jar文件,便可以看到源碼了,效果如下:

被混淆過的效果圖(類文件名稱以及里面的方法名稱都會以a,b,c....之類的樣式命名):


三、 圖形化反編譯apk(本人未使用過)

上述步驟一、二講述了命令行反編譯apk,現在提供一種圖形化反編譯工具:Androidfby

首先,下載上述反編譯工具包,打開Androidfby目錄,雙擊Android反編譯工具.exe,就可以瀏覽打開要反編譯的apk

通過反編譯,你可以獲知該應用用到了什么第3方的庫文件,它的代碼是如何編寫的等等。

然而,如果該APK進行了混淆處理,那么你看到的類文件名稱以及里面的方法名稱都會以a,b,c....之類的樣式命名,所以你可以想找到你所想得知的界面代碼可能會十分費勁,找到了代碼可能看起來也會很費勁,可是一個大體的思路會獲得,有了這個思路,你就可以自己去嘗試了。

本人曾經想寫一個類似唱吧的名人界面布局,可是當初第一次接觸不知道如何去寫,進進行了反編譯,即使他的那個代碼是混淆過的,我也看出來他是通過LISTVIEW的TYPE設定不同的ITEM布局實現了??赡芎枚嘁枚际遣捎弥貙慥IEW來實現效果,你可以得到他的大體思路對你的開發(fā)有益無害。

還有處于一個開發(fā)者辛辛苦苦將自己的應用開發(fā)出來被別人一反編譯便成為了他自己的東西,所以要進行混淆處理

作為Android應用開發(fā)者,不得不面對一個尷尬的局面,就是自己辛辛苦苦開發(fā)的應用可以被別人很輕易的就反編譯出來。

Google似乎也發(fā)現了這個問題,從SDK2.3開始我們可以看到在android-sdk-windows\tools\下面多了一個proguard文件夾

proguard是一個java代碼混淆的工具,通過proguard,別人即使反編譯你的apk包,也只會看到一些讓人很難看懂的代碼,從而達到保護代碼的作用。

下面具體說一說怎么樣讓SDK2.3下的proguard.cfg文件起作用,先來看看android-sdk-windows\tools\lib\proguard.cfg的內容:

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
 
-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-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 com.android.vending.licensing.ILicensingService 
 
-keepclasseswithmembernames class * { 
  native <methods>; 
} 
 
-keepclasseswithmembernames class * { 
  public <init>(android.content.Context, android.util.AttributeSet); 
} 
 
-keepclasseswithmembernames class * { 
  public <init>(android.content.Context, android.util.AttributeSet, int); 
} 
 
-keepclassmembers enum * { 
  public static **[] values(); 
  public static ** valueOf(java.lang.String); 
} 
 
-keep class * implements android.os.Parcelable { 
 public static final android.os.Parcelable$Creator *; 
} 

從腳本中可以看到,混淆中保留了繼承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本組件以及com.android.vending.licensing.ILicensingService,

并保留了所有的Native變量名及類名,所有類中部分以設定了固定參數格式的構造函數,枚舉等等。(詳細信息請參考<proguard_path>/examples中的例子及注釋。)

讓proguard.cfg起作用的做法很簡單,就是在eclipse自動生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

完整的default.properties文件應該如下:

# This file is automatically generated by Android Tools. 
# Do not modify this file -- YOUR CHANGES WILL BE ERASED! 
# 
# This file must be checked in Version Control Systems. 
# 
# To customize properties used by the Ant build system use, 
# "build.properties", and override values to adapt the script to your 
# project structure. 
 
# Project target. 
target=android-9 
proguard.config=proguard.cfg 

大功告成,正常的編譯簽名后就可以防止代碼被反編譯了。

相關文章

  • Android仿微信頁面底部導航效果代碼實現

    Android仿微信頁面底部導航效果代碼實現

    本文給大家分享一段代碼有關android仿微信頁面底部導航效果代碼實現的思路,非常不錯,感興趣的朋友一起看看吧
    2016-09-09
  • Android ADT 離線下載操作步驟

    Android ADT 離線下載操作步驟

    這篇文章主要介紹了Android ADT 離線下載操作步驟的相關資料,需要的朋友可以參考下
    2017-04-04
  • Android通過wifi連接手機(不需要root)

    Android通過wifi連接手機(不需要root)

    這篇文章主要為大家詳細介紹了Android通過wifi連接手機,不需要root,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android ListView實現單選及多選等功能示例

    Android ListView實現單選及多選等功能示例

    這篇文章主要介紹了Android ListView實現單選及多選等功能的方法,結合實例形式分析了ListView單選、多選及長按多選等功能相關實現技巧,需要的朋友可以參考下
    2017-08-08
  • Android使用PowerImageView實現播放強大的ImageView動畫效果

    Android使用PowerImageView實現播放強大的ImageView動畫效果

    今天我們就來編寫一個PowerImageView控件,讓它既能支持ImageView控件原生的所有功能,同時還可以播放GIF圖片
    2018-05-05
  • Android 雙進程守護的實現代碼

    Android 雙進程守護的實現代碼

    這篇文章主要介紹了Android 雙進程守護的實現代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 簡單實用的Android studio 調試技巧

    簡單實用的Android studio 調試技巧

    這篇文章主要介紹了簡單實用的Android studio 調試技巧的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • android使用ViewPager實現輪播效果

    android使用ViewPager實現輪播效果

    這篇文章主要為大家詳細介紹了android使用ViewPager實現輪播效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Kotlin中的5種單例模式示例詳解

    Kotlin中的5種單例模式示例詳解

    這篇文章主要給大家介紹了關于Kotlin中5種單例模式的相關資料,分別包括了餓漢式、懶漢式 、線程安全的懶漢式 、雙重校驗鎖式以及靜態(tài)內部類式,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-08-08
  • Android中使用RecyclerView實現下拉刷新和上拉加載

    Android中使用RecyclerView實現下拉刷新和上拉加載

    RecyclerView 是Android L版本中新添加的一個用來取代ListView的SDK,它的靈活性與可替代性比listview更好。這篇文章主要介紹了Android中使用RecyclerView實現下拉刷新和上拉加載的相關資料,需要的朋友可以參考下
    2016-03-03

最新評論