『壹』 app和apk什麼區別
所代表的意義上有所不同。
APP:應用程序,Application的縮寫。
apk:android application package,Android應用程序包。
文件格式不同。
APP:沒有固定的格式,取決於廠家的APP生產。
apk:APK 文件基於 ZIP 文件格式,它與JAR文件的構造方式相似,互聯網媒體類型是:application/vnd.android.package-archive。
(1)android包分類擴展閱讀:
APK是Android application package的縮寫,即Android安裝包(apk)。APK是類似SymbianSis或Sisx的文件格式。通過將APK文件直接傳到Android模擬器或Android手機中執行即可安裝。
apk文件和sis一樣,把androidsdk編譯的工程打包成一個安裝程序文件,格式為apk。 APK文件其實是zip格式,但後綴名被修改為apk。
通過UnZip解壓後,可以看到Dex文件,Dex是DalvikVM executes的簡稱,即Android Dalvik執行程序,並非java ME的位元組碼而是Dalvik位元組碼。Android在運行一個程序時首先需要UnZip,然後類似Symbian那樣直接但不同於Windowsmobile中的PE文件,程序的保密性和可靠性不是很高。
通過dexmp命令可以反編譯它,但這種架構符合發展規律,微軟的WindowsGadgets(WPF)也採用了這種架構方式。在Android平台中,dalvikvm的執行文件被打包為apk格式,最終運行時載入器會先解壓,然後獲取編譯後的androidmanifest.xml文件中的permission聲明對安全訪問的限制。
要知道仍然存在很多安全限制,但將apk文件傳到/system/app文件夾下會發現執行是不受限制的。也許我們平時安裝都不會選用這個文件夾,但在androidrom中,系統的apk文件默認會放入這個文件夾,它們擁有root許可權。
『貳』 android 的apk包有什麼組成
1.APK文件簡介
APK是AndroidPackage的縮寫,即即Androidapplicationpackage文件或Android安裝包。每個要安裝到Android平台的應用都要被編譯打包為一個單獨的文件,後綴名為.apk。APK文件是用專業軟體eclipse編譯生成的文件包,其中包含了應用的二進制代碼、資源、配置文件等。通過將APK文件直接傳到Android手機中執行即可安裝。APK文件其實就是zip格式,但其擴展名被改為apk,用解壓軟體可以直接打開。通過WinRAR或UnZip解壓後,你會看到有幾個文件和文件夾。一個典型的APK文件通常有下列內容組成:AndroidManifest.xml程序全局配置文件classes.dexDalvik位元組碼
resources.arsc
編譯後的二進制資源文件
META-INF\該目錄下存放的是簽名信息res\
該目錄存放資源文件
assets\該目錄可以存放一些配置文件
下面對這些文件和目錄做些基本的注釋和介紹。•AndroidManifest.xml
該文件是每個應用程序都必須定義和包含的文件,它描述了應用程序的名字、版本、許可權、引用的庫文件等等信息。需要解包後才能加以閱讀。
•classes.dex文件
classes.dex是java源碼編譯後生成的java位元組碼文件。dex是DalvikVMexecutes的全稱,即AndroidDalvik執行程序,並非JavaME的位元組碼而是Dalvik位元組碼。•resources.arsc
編譯後的二進制資源文件。•META-INF目錄
META-INF目錄下存放的是簽名信息,用來保證apk包的完整性和系統的安全。在eclipse編譯生成一個apk包時,會對所有要打包的文件做一個校驗計算,並把計算結果放在META-INF目錄下。這就保證了apk包里的文件不能被隨意替換。比如拿到一個apk包後,如果想要替換裡面的一幅圖片,一段代碼,或一段版權信息,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來就給病毒感染
和惡意修改增加了難度,有助於保護系統的安全。•res目錄
res目錄存放資源文件。包括圖片,字元串等等。解包後,幾乎所有可能的修改和編輯工作基本都在這里。•assets目錄
assets目錄可以存放一些配置文件,這些文件的內容在程序運行過程中可以通過相關的API獲得。
2.APK文件的解包和打包
APK文件是用專業軟體eclipse編譯生成的文件包。在網上可以找到許多軟體來對APK的內容進行反編譯,例如:可以通過AXMLPrinter2工具和命令:java-jarAXMLPrinter2.jarAndroidManifest.xml解開在apk中的AndroidManifest.xml。最近,業界有一個功能強大的解包打包工具包apktool,可以在Windows下用來方便快速地對APK文件進行解包和打包,給修改和編輯工作帶來許多方便。下面來介紹它的使用。
1)APKtool軟體包
APKtool軟體包有2個程序組成:apktool.jar和aapt.exe另外提供一個批處理文件:apktool.bat,其內容為:java-jar"%~dp0\apktool.jar"%1%2%3%4%5%6%7%8%9
運行apktools.jar需要java環境(1.6.0版本以上)。apktool.jar用於解包,apktool.jar和aapt.exe聯合用於打包。2)APK文件的解包
下面以解開Contacts.apk為例。首先把Contacts.apk復制到當前工作目錄下(例:Test)。在DOS下打入命令apktooldContacts.apkABC
這里「d」表示要解碼。Contacts.apk是要解包的APK文件。ABC是子目錄名。所有解包的文件都會放在這個子目錄內。3)APK文件的打包在DOS下打入命令
apktoolbABCNew-Contacts.apk這里「b」表示要打包
ABC是子目錄名,是解包時產生的子目錄,用來存放所有解包後的和修改後的文件。
New-Contacts.apk是打包後產生的新的APK文件。4)Framework框架文件
在解開APK文件時,apktool需要框架文件(framework-res.apk)來解碼和打包。Apktool已經包含了標準的框架,所以在大多數APK文件的解包時,不需要另外提供框架文件。但是,某些製造商使用了他們自己的框架文件,為了解包,就不得不從手機中把框架文件(framework-res.apk)提取出來,然後安裝到計算機。安裝命令是:
apktoolifframework-res.apk
安裝後就會得到:~\apktool\framework\1.apk5)解包、解包和簽名批處理
在實際使用時,可能對多個APK文件進行處理。方便的做法是寫成批處理文件。打包和簽名可以一次完成。
解包批處理命令:
for%%iin(*.apk)dojava-jarapktool.jard%%i_%%i&&move_%%iModifying_Files&©%%iBackuped_Raw_Files&&@echoFile[%%i]unpackingprocessiscompleted!
打包和簽名批處理命令:
for/d%%iin(*)docd..&&java-jarapktool.jarbModifying_Files\%%i&&
java
-jar
signapk.jar
testkey.x509.pem
testkey.pk8
Modifying_Files\%%i\dist\*.apk%%i&&ren%%iNew%%i&&moveNew%%iModified_Signed_Files&&@echo%%iCompleterepackingandSigning
『叄』 鎵嬫満瀹夎呭寘鏍煎紡
AndroidAPK銆乮OSIPA銆
1銆丄ndroidAPK錛欰ndroidAPK鏄疉ndroid緋葷粺浣跨敤鐨勫畨瑁呭寘鏍煎紡銆侫PK鏄疉ndroidPackage鐨勭緝鍐欙紝鍗矨ndroid瀹夎呭寘銆侫PK鏄涓縐嶅帇緙╂枃浠訛紝鍐呴儴鍖呭惈浜咥ndroid搴旂敤紼嬪簭鐨勪唬鐮併佽祫婧愭枃浠跺拰娓呭崟鏂囦歡絳夈傜敤鎴峰彲浠ラ氳繃鐩存帴鍦ˋndroid璁懼囦笂鎵ц孉PK鏂囦歡鎴栭氳繃搴旂敤鍟嗗簵榪涜屽畨瑁呫傞氳繃鍚勭嶆笭閬撹幏鍙栫殑APK鏂囦歡鍙浠ュ畨瑁呭湪Android鎵嬫満鎴栧鉤鏉跨數鑴戜笂銆
2銆乮OSIPA錛歩OSIPA鏄鑻規灉搴旂敤鏂囦歡鐨勬牸寮忋侷PA鏄痠PhoneApplication鐨勭緝鍐欙紝鏄涓縐嶅帇緙╂枃浠訛紝鍖呭惈浜唅OS搴旂敤紼嬪簭鐨勪簩榪涘埗浠g爜銆佽祫婧愭枃浠跺拰絳懼悕絳夈傜敤鎴峰彲浠ラ氳繃iTunes鎴栧埆鐨剗OS璁懼囩$悊宸ュ叿瀹夎匢PA鏂囦歡鍒癷Phone銆乮Pad鎴杋PodTouch涓娿傜敤鎴烽氳繃AppStore涓嬭澆鍜屽畨瑁卛OS搴旂敤紼嬪簭錛岃屼笉鐢ㄧ洿鎺ュ勭悊IPA鏂囦歡銆
『肆』 Android活動命名是怎樣的規則
一.標識符命名方法
1 .小駝峰命名法,除首單詞外,其餘所有單詞的第一個字母大寫。如:allPrice,getAllNames
2.大駝峰命名法,所有單詞的第一個字母大寫。如:GuideActivity,StudentInfoBean
3.下劃線命名法:單詞與單詞間用下劃線做間隔。如:activity_main,select_backGround_color
二.命名規范
(一)包(packages)的命名規范:
採用反域名命名規則,全部使用小寫字母。一級包名為com,二級包名lwz(為個人或公司名稱,可以簡寫),三級包名guidecity(根據應用進行命名),四級包名ui或utils等(模塊名或層級名),根據實際情況也是可以用五級包名,六級包名。
這里的四級包名是要重點理解和分類的,例如:com.lwz.應用.utils ,此包中包含:公共工具方法類
1.utils
此包中包含:公共工具方法類,比如:SPHelperUtil、TimeUitl、FileUtil等
2.adapter
此包中包含:一些適配器的類,比如:ArticleAdapter、FansAdapter,HistorAdaper等
3.base
此包中包含:一些共同類的基類,比如:BaseActivity(所有的Activity類都繼承這個類)、BaseFragment(所有的Fragment都繼承這個類),ListItemAdapter(封裝了Base Adapter的基類)等
4.bean
此包中包含:一些屬性對象類,比如:StudentBean、LonginBean、ArticleBean等
5.config
此包中包含:最頂級的配置類,比如:MyApp(繼承了Application)
6.httpservice
此包中包含:Http數據的請求介面類,好像Retrofit網路框架請求網路數據才要使用。如:ILogin介面,IAddTopic介面,IUpdate等
7.interface
此包中包含:某個頁面或對象的所用操作介面類,這個介面主要是定義這個對象的所有方法。如:IUser介面,IArticle介面,ITopic介面等
8.model
這是MVC或MVP框架設計中的M。此包中包含:某個頁面或對象的所用操作類,這個類繼承了上面定義的interface介面,重寫並實現厘米那的方法。如:UserModel,ArticleMode類,TopicMode類等
9.ui
這個ui表示的頁面的意思,也是MVC或MVP中的V,很多人把這個包名寫成activity,其實是不準確的,因為ui包含了activity和fragment,所以ui是四級包名,而activity和fragment是ui包下的五級包名。
activity此包中包含:Activity對象類。如:MainActivity類,HomeActivity類,FansListActivity類等。如果是使用了MVP框架模式,activity包名下還可以有六級包名,比如:loginMVP(包含ILoginView介面類,LoginPresenter類)、seleteTopicMVP
fragment此包中包含:Fragment對象類。但是Fragment一般都是多個存在的,所以fragment包下一般還有六級包名,表示裡面是哪個頁面的Fragment對象。
10.weight
此包中包含:自定義View或自定義對話框等視圖類。如:CursroDialog類,SpringScrollView類,ScrollListView類等
11.db
此包中包含:資料庫操作類
12.service
此包中包含:Service服務類
13.broadcast
此包中包含:Broadcast廣播接收者類
14.provider
此包中包含:Provider內容提供者類(用得很少)
包名規劃我感覺對程序後期閱讀或修改有很大的幫助,特別是很大的程序,文件太多,不規劃的話自己都不知道這個類是干什麼的!
當然如果程序中沒有這一類的文件,這個包名是可以不寫,但是一些基本的包名,基本每個程序都是需要的比如:ui、utils、adapter、weight、bean等
(二)類(classes)的命名規范:
一般用名詞,採用大駝峰命名法,盡量避免縮寫,除非該縮寫是眾所周知的,比如HTML,URL,如果類名稱中包含單詞縮寫,則單詞縮寫的每個字母均應大寫。
以下是部分示例說明:
1.activity 類,如歡迎頁面類WelcomeActivity.
2.adapter類,如商品詳情適配器ProctDetailAdapter
3.util公共方法類,如:線程池管理類:ThreadPoolManager,日誌工具類:LogUtil
4.db資料庫類,以DBHelper後綴標識。如城市資料庫:CityDBHelper
5.Service類,以Service為後綴標識
6.BroadcastReceive,以Broadcast為後綴標識
7.ContentProvider,以Provider為後綴標識
(三)介面(interface):
命名規則與類一樣採用大駝峰命名法,多以able或ible結尾或以I開頭,如Runnable、Accessible、IUser。
(四)方法(methods)的命名規則:
一般使用動詞或動名詞,採用小駝峰命名法 例如:onCreate(),run()
>1.initXXX()初始化相關方法,使用init為前綴標識
2.isXXX()、checkXXX() 方法返回值為boolean型的請使用is或check為前綴標識
3.getXXX()返回某個值的方法,使用get為前綴標識
4.processXXX() 對數據進行處理的方法,盡量使用process為前綴標識
5.displayXXX() 彈出提示框和提示信息,使用display為前綴標識
6.saveXXX() 與保存數據相關的,使用sav為e前綴標識
7.resetXXX() 對數據重組的,使用reset前綴標識
8.clearXXX()removeXXX() 清除數據相關的,使用clear或remove為前綴標識
9.drawXXX() 繪制數據或效果相關的,使用draw前綴標識
(五)變數(variables)採用小駝峰命名法。類中控制項名稱一般與xml布局id保持一致
(六)常量(constants)全部大寫,採用下劃線命名法.例如:MIN_WIDTH
(七)XML文件(布局文件):全部小寫,採用下劃線命名法,
例如:main_activity.xml, item_activity.xml、homeposter_item_poster.xml
(八)資源文件(圖片): 全部小寫,採用下劃線命名法,加前綴區分
命名
說明
btn_login_normal 按鈕圖片使用btn_功能_說明
bg_head 背景圖片使用bg_功能_說明
def_search_cell 默認圖片使用def_功能_說明
icon_more_help 圖標圖片使用icon_功能_說明
seg_list_line 具有分隔特徵的圖片使用seg_功能_說明
sel_ok 選擇圖標使用sel_功能_說明
(九)動畫文件(anim包):全部小寫,採用下劃線命名法,加前綴區分。
動畫命名例子:
規范寫法
備注
click_head_left 點擊背景切換動畫使用click前綴標識
bg_shape_rectangle 背景自定義圖形使用bg前綴標識
show_shopcar_add 小動畫效果使用show前綴標識
(十)資源ID(resources id):大小寫規范與方法名一致,採用小駝峰命名法。
命名規范為「資源控制項的縮寫名」+「變數名」。例如TextView的id=「tv_userName」。注意:頁面控制項名稱應該和控制項id名一般是一致,例如:TextView tv_userName=(TextView)findViewById(R.id.tv_userName);
三.圖解包名規范示例
本文主要是想對程序包名的命名規劃,這里展示我之前開發的程序的包名圖片,供大家參考:
(一)總顯示
上面example這個包名一般是不用的!
(二)ui包下
fragment展示
activity 展示:
(三)utils和weight包下
(四)res文件夾下的部分文件展示:
drawable包下:
layout包下:
上面就是一個完成程序的主要文件展示,這個程序大概有三百多個文件(包括java文件和資源文件),這里就不一一展示了!
大家可以想像一下,如果這個程序包名和文件名都沒有很好規劃,那麼你要找你想要的幾個文件是一個多麼麻煩的事情!
一般地,我在創建每個java程序文件都會在上面做幾句話的註解,說明一下這個文件的作用,有些布局文件也是有簡單說明。這樣更加有利於後期的程序代碼迭代或版本更新!
命名規范是必須的嗎?有些是!有些不是。比如包名、類的定義,系統沒有硬性規定,但是資源文件res文件夾下的命名,系統要求資源文件名必須小寫,否則,你的程序一直運行不了,你都不知道為啥。
最後說一句:程序開發中命名規范是一個很好的開發習慣!