將apk文件拷貝至sdcard上。
創(chuàng)新互聯(lián)公司成立與2013年,先為康縣等服務建站,康縣等地企業(yè),進行企業(yè)商務咨詢服務。為康縣企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
命令順序如下:
進入Android sdk文件夾/tools目錄下
輸入adb shell
輸入su
輸入cd data
輸入cd app
這時就可以看到你安裝的所有的apk文件。輸入cp 空格 對應的apk 空格 /sdcard/
這樣就將apk文件拷貝出來了。
將apk文件后綴直接變成rar格式,可以看到熟悉的目錄結構了,
其中xml文件打開后都是二進制的,無法查看。
這時就用到了一個android4me的AXMLPrinter2工具。(請自行百度搜索)
輸入以下命令,將xml文件解析出來
java -jar AXMLPrinter2.jar showtimes_list.xml
此命令是在命令行中查看此showtimes_list.xml
將showtimes_list.xml生成xml文件,則輸入以下命令:
java -jar AXMLPrinter2.jar showtimes_list.xml h.xml
目前進行到這一步,只能看到xml文件的內容,其工程中的java源文件還是看不到,看目錄結構下有一個classes.dex文件,我們需要將dex文件變?yōu)閖ar文件。
這里用到了另一個工具dex2jar。(自行搜索下載)
在Windows下解壓之后的目錄如下圖所示:
在命令行中,進入到此目錄下:
在Windows下,輸入以下命令:
dex2jar.bat c:\classes.dex
運行完之后,在C盤會多一個classes.dex.dex2jar.jar文件,此文件就是我們需要的jar文件。
利用jd-gui,將jar文件反向工程為java代碼。(請自行搜索下載)
它分為Windows、Linux、和max三個版本,這里我下載的是Windows版本的。
解壓之后,雙擊運行exe文件,選擇classes.dex.dex2jar.jar文件,相應的jar文件中的Java文件就被反向工程顯示出來了!
Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯(lián)盟領導及開發(fā)。尚未有統(tǒng)一中文名稱,中國大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由Andy Rubin開發(fā),主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發(fā)商及電信營運商組建開放手機聯(lián)盟共同研發(fā)改良Android系統(tǒng)。隨后Google以Apache開源許可證的授權方式,發(fā)布了Android的源代碼。第一部Android智能手機發(fā)布于2008年10月。Android逐漸擴展到平板電腦及其他領域上,如電視、數(shù)碼相機、游戲機等。2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。 2013年的第四季度,Android平臺手機的全球市場份額已經達到78.1%。?[1]??2013年09月24日谷歌開發(fā)的操作系統(tǒng)Android在迎來了5歲生日,全世界采用這款系統(tǒng)的設備數(shù)量已經達到10億臺。
Android一詞最早出現(xiàn)于法國作家利爾亞當(Auguste Villiers de l'Isle-Adam)在1886年發(fā)表的科幻小說《未來夏娃》(L'ève future)中。他將外表像人的機器起名為Android。
Android的Logo是由Ascender公司設計的,誕生于2010年,其設計靈感源于男女廁所門上的圖形符號, [1]? 于是布洛克繪制了一個簡單的機器人,它的軀干就像錫罐的形狀,頭上還有兩根天線,Android小機器人便誕生了。其中的文字使用了Ascender公司專門制作的稱之為“Droid ” 的字體。Android是一個全身綠色的機器人,綠色也是Android的標志。顏色采用了PMS 376C和RGB中十六進制的#A4C639來繪制,這是Android操作系統(tǒng)的品牌象徵。有時候,它們還會使用純文字的Logo。
在安卓中打開音樂、視頻、圖片、文檔等文件是需要有讀取SD卡權限的,如果是6.0以下的系統(tǒng),則直接在清單文件中聲明SD卡讀取權限即可;如果是6.0或以上,則需要動態(tài)申請權限。
在7.0以下中打開文件時,通過intent調用系統(tǒng)安裝得人軟件打開文件就好了,但是在android7.0及以上的機子上這么做會報android.os.FileUriExposedException錯誤,
1)讀取SD卡
2)動態(tài)申請權限
//設備API大于6.0時,主動申請權限(讀取文件的權限)
public static? void requestPermission(Activity context) {
if (Build.VERSION.SDK_INT = Build.VERSION_CODES.M) {
? ? if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
? ? ? ? ? ? != PackageManager.PERMISSION_GRANTED) {
? ? ? ? ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
? ? ? ? ? ? ? ? Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
? ? }
}
}
3)讀取文件
intent = OpenFileUtil.openFile(filePath+"/"+FileName+"."+end);
使用OpenFileUtil這個。鏈接:
為了兼容Android7.0,獲取文件Uri需要使用到FileProvider。
1)首先是AndroidManifest文件里面注冊FileProvider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true"
? android:name="android.support.FILE_PROVIDER_PATHS"
? ? android:resource="@xml/provider_paths" / //需要自己編寫xml文件
2)provider_paths.xml文件的編寫
// .表示根目錄
3)打開文檔方式為
intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
File txtFile = new File(filePath+"/"+FileName+"."+end);
Uri contentUri = FileProvider.getUriForFile(MyApplication.getContext(), BuildConfig.APPLICATION_ID+".provider", txtFile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
grantUriPermission(context, contentUri, intent);
startActivity(intent);
4)grantUriPermission方法添加權限
private static void grantUriPermission (Context context, Uri fileUri, Intent intent) {
List resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
? ? String packageName = resolveInfo.activityInfo.packageName;
? ? context.grantUriPermission(packageName, fileUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
}
綜合兩種情況:
//判斷是否是AndroidN以及更高的版本,Build.VERSION_CODES.N是Android 7.0
if (Build.VERSION.SDK_INT = Build.VERSION_CODES.N) {
intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
File txtFile = new File(filePath+"/"+FileName+"."+end);
Uri contentUri = FileProvider.getUriForFile(MyApplication.getContext(), BuildConfig.APPLICATION_ID+".provider", txtFile);
Log.i("文件地址:",contentUri.toString());
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
grantUriPermission(MyApplication.getContext(), contentUri, intent);
} else {
//7.0以下的可以打開文件了
intent = OpenFileUtil.openFile(filePath+"/"+FileName+"."+end);
}
MyApplication.getContext().startActivity(intent);
package命名: 全部使用小寫字母。一級包名為com,二級包名為xx(可以是公司或則個人的隨便),三級包名根據(jù)應用進行命名,四級包名為模塊名或層級名。
類的命名:大駝峰的命名法,如:MainActivity
方法的命名:小駝峰的命名法,如:startActivity。
接口的命名: 命名規(guī)則與類一樣采用大駝峰命名法,多以able或ible結尾。
變量的命名:采用小駝峰命名法。
注意:作用統(tǒng)一的變量,在結尾加一個量詞進行區(qū)分更容易搜索和記憶,如strNameFirst和strNameLast
常量的命名:常量全部大寫,如:MIN MAX
布局文件的命名:布局文件使用“前綴_邏輯名”的方式,單詞全部小寫:
①activity的布局——activity_xxx
②fragment的布局——fragment_xxx
③自定義控件的布局——view_xxx
④對話框的布局——dialog_xxx
⑤列表項的布局——item_xxx
資源文件的命名:資源文件使用“模塊名_邏輯名”方式,單詞全部小寫:
①按鈕以btn為前綴,如果是圖片可以是btn_login.png,按鈕的點擊形態(tài)可以是btn_login_normal.xml以及btn_login_pressed.xml
②圖片的命名以ic為前綴,例如ic_share.png
③背景圖片可以用bg作為前綴。
④shape:shape_text_bg
⑤selector:selector_home
注釋的規(guī)范:
其他編碼規(guī)范:除了以上的規(guī)范,其他比較重要的注意點,總結如下:
①java中盡量不出現(xiàn)中文
②服務端可以實現(xiàn)的,就不要放在客戶端
③引用第三方庫要慎重,避免應用大容量的第三方庫,導致客戶端包非常大
工具/材料
安卓手機
01
我們打開手機撥號鍵盤輸入代碼,按撥號鍵就可使用哦!
*#*#4636#*#*?
顯示手機信息、電 池信息、電 池記錄、使用統(tǒng)計數(shù)據(jù)、WiFi 信息?
*#*#7780#*#*?
重設為原廠設定,不會刪除預設程 序,及 SD 卡檔案。?
*2767*3855#?
重設為原廠設定,會刪除 SD 卡所有檔案。?
*#*#34971539#*#*?
顯示相機相機韌體版本,或更新相機韌體?
02
WLAN、 GPS 及藍 牙測試的代碼
*#*#232339#*#* 或 *#*#526#*#* 或 *#*#528#*#* – WLAN 測試
*#*#232338#*#* – 顯示 WiFi MAC 地址
*#*#1472365#*#* – GPS 測試
*#*#1575#*#* – 其它 GPS 測試
*#*#232331#*#* – 藍 牙測試
*#*#232337#*# – 顯示藍 牙裝置地址
*#*#8255#*#*啟動 GTalk 服務監(jiān)視器
03
顯示手機軟 件版本的代碼
*#*#4986*2650468#*#* – PDA、 Phone、 H/W、 RFCallDate
*#*#1234#*#* – PDA 及 Phone
*#*#1111#*#* – FTA SW 版本
*#*#2222#*#* – FTA HW 版本
*#*#44336#*#* – PDA 、Phone、 CSC、 Build Time、 Changelist number
04
各項硬件測試
*#*#0283#*#* – Packet Loopback
*#*#0*#*#* – LCD 測試
*#*#0673#*#* 或 *#*#0289#*#* – Melody 測試
*#*#0842#*#* – 裝置測試,例如振動、亮度
*#*#2663#*#* – 觸控屏 幕版本
*#*#2664#*#* – 觸控屏 幕測試
*#*#0588#*#* – 接近感應器測試
*#*#3264#*#* – 內 存版本