本文目錄一覽:
- 1、用showJava轉換成源代碼後,怎麼打包成apk
- 2、java show()函數
- 3、Java 中的show方法問題
- 4、(java)show方法調用show的時候顯示所輸入參數
- 5、Java問題,show是什麼意思,有什麼作用?
- 6、JAVA中的show加方法名()
用showJava轉換成源代碼後,怎麼打包成apk
最近看了老羅分析android資源管理和apk打包流程的博客,參考其他一些資料,做了一下整理,脫離繁瑣的打包細節和數據結構,從整體上概述了apk打包的整個流程。
流程概述:
1、打包資源文件,生成R.java文件
2、處理aidl文件,生成相應java 文件
3、編譯工程源代碼,生成相應class 文件
4、轉換所有class文件,生成classes.dex文件
5、打包生成apk
6、對apk文件進行簽名
7、對簽名後的apk文件進行對其處理
打包過程使用的工具
名稱 功能介紹 在操作系統中的路徑 源碼路徑
aapt
(Android Asset Package Tool)
Android資源打包工具
${ANDROID_SDK_HOME} /build-tools/
ANDROID_VERSION/aapt
frameworks\base\tools\aap
aidl
(android interface definition language)
Android介面描述語言,
將aidl轉化為.java文件的工具
${ANDROID_SDK_HOME}/build-tools/
ANDROID_VERSION/aidl
frameworks\base\tools\aidl
javac Java Compiler
${JDK_HOME}/java
c或/usr/bin/javac
dex
轉化.class文件為Davik VM
能識別的.dex文件
${ANDROID_SDK_HOME}/build-tools/
ANDROID_VERSION/dx
apkbuilder 生成apk包
${ANDROID_SDK_HOME}/tools/
apkbuilder
sdk\sdkmanager\libs\sdklib\
src\com\android\sdklib\build\
ApkBuilderMain.java
jarsigner .jar文件的簽名工具 ${JDK_HOME}/jarsigner或/usr/bin/jarsigner
zipalign 位元組碼對齊工具
${ANDROID_SDK_HOME}/tools
/zipalign
第一步:打包資源文件,生成R.java文件。
【輸入】Resource文件(就是工程中res中的文件)、Assets文件(相當於另外一種資源,這種資源Android系統並不像對res中的文件那樣優化它)、AndroidManifest.xml文件(包名就是從這裡讀取的,因為生成R.java文件需要包名)、Android基礎類庫(Android.jar文件)
【工具】aapt工具
【輸出】打包好的資源(bin目錄中的resources.ap_文件)、R.java文件(gen目錄中)
打包資源的工具aapt,大部分文本格式的XML資源文件會被編譯成二進位格式的XML資源文件,除了assets和res/raw資源被原裝不動地打包進APK之外,其它的資源都會被編譯或者處理。 。
生成過程主要是調用了aapt源碼目錄下的Resource.cpp文件中的buildResource()函數,該函數首先檢查AndroidManifest.xml的合法性,然後對res目錄下的資源子目錄進行處理,處理的函數為makeFileResource(),處理的內容包括資源文件名的合法性檢查,向資源表table添加條目等,處理完後調用compileResourceFile()函數編譯res與asserts目錄下的資源並生成resources.arsc文件,compileResourceFile()函數位於aapt源碼目錄的ResourceTable.cpp文件中,該函數最後會調用parseAndAddEntry()函數生成R.java文件,完成資源編譯後,接下來調用compileXmlfile()函數對res目錄的子目錄下的xml文件分別進行編譯,這樣處理過的xml文件就簡單的被「加密」了,最後將所有的資源與編譯生成的resorces.arsc文件以及「加密」過的AndroidManifest.xml文件打包壓縮成resources.ap_文件(使用Ant工具命令行編譯則會生成與build.xml中「project name」指定的屬性同名的ap_文件)。
關於這一步更詳細的流程可閱讀
第二步:處理aidl文件,生成相應的java文件。
【輸入】源碼文件、aidl文件、framework.aidl文件
【工具】aidl工具
【輸出】對應的.java文件
對於沒有使用到aidl的android工程,這一步可以跳過。aidl工具解析介面定義文件並生成相應的java代碼供程序調用。
第三步:編譯工程源代碼,生成下相應的class文件。
【輸入】源碼文件(包括R.java和AIDL生成的.java文件)、庫文件(.jar文件)
【工具】javac工具
【輸出】.class文件
這一步調用了javac編譯工程src目錄下所有的java源文件,生成的class文件位於工程的bin\classes目錄下,上圖假定編譯工程源代碼時程序是基於android SDK開發的,實際開發過程中,也有可能會使用android NDK來編譯native代碼,因此,如果可能的話,這一步還需要使用android NDK編譯C/C++代碼,當然,編譯C/C++代碼的步驟也可以提前到第一步或第二步。
第四步:轉換所有的class文件,生成classes.dex文件。
【輸入】 .class文件(包括Aidl生成.class文件,R生成的.class文件,源文件生成的.class文件),庫文件(.jar文件)
【工具】dx工具
【輸出】.dex文件
前面多次提到,android系統dalvik虛擬機的可執行文件為dex格式,程序運行所需的classes.dex文件就是在這一步生成的,使用的工具為dx,dx工具主要的工作是將java位元組碼轉換為dalvik位元組碼、壓縮常量池、消除冗餘信息等。
第五步:打包生成apk。
【輸入】打包後的資源文件、打包後類文件(.dex文件)、libs文件(包括.so文件,當然很多工程都沒有這樣的文件,如果你不使用C/C++開發的話)
【工具】apkbuilder工具
【輸出】未簽名的.apk文件
打包工具為apkbuilder,apkbuilder為一個腳本文件,實際調用的是android-sdk\tools\lib\sdklib.jar文件中的com.android.sdklib.build.ApkBuilderMain類。它的代碼實現位於android系統源碼的sdk\sdkmanager\libs\sdklib\src\com\android\sdklib\build\ApkBuilderMain.java文件,代碼構建了一個ApkBuilder類,然後以包含resources.arsc的文件為基礎生成apk文件,這個文件一般為ap_結尾,接著調用addSourceFolder()函數添加工程資源,addSourceFolder()會調用processFileForResource()函數往apk文件中添加資源,處理的內容包括res目錄與asserts目錄中的文件,添加完資源後調用addResourceFromJar()函數往apk文件中寫入依賴庫,接著調用addNativeLibraries()函數添加工程libs目錄下的Native庫(通過android NDK編譯生成的so或bin文件),最後調用sealApk()關閉apk文件。
第六步:對apk文件進行簽名。
【輸入】未簽名的.apk文件
【工具】jarsigner
【輸出】簽名的.apk文件
android的應用程序需要簽名才能在android設備上安裝,簽名apk文件有兩種情況:一種是在調試程序時進行簽名,使用eclipse開發android程序時,在編譯調試程序時會自己使用一個debug.keystore對apk進行簽名;另一種是打包發布時對程序進行簽名,這種情況下需要提供一個符合android開發文檔中要求的簽名文件。簽名的方法也分兩種:一種是使用jdk中提供的jarsigner工具簽名;另一種是使用android源碼中提供的signapk工具,它的代碼位於android系統源碼build\tools\signapk目錄下。
第七步:對簽名後的apk文件進行對齊處理。
【輸入】簽名後的.apk文件
【工具】zipalign工具
【輸出】對齊後的.apk文件
這一步需要使用的工具為zipalign,它位於android-sdk\tools目錄,源碼位於android系統源碼的build\tools\zipalign目錄,它的主要工作是將spk包進行對齊處理,使spk包中的所有資源文件距離文件起始偏移為4位元組整數倍,這樣通過內存映射訪問apk文件時速度會更快,驗證apk文件是否對齊過的工作由ZipAlign.cpp文件的verify()函數完成,處理對齊的工作則由process()函數完成。
以一個具體項目中包含的具體文件為例作圖如下:
java show()函數
你建立了JPanel,但是沒有把JPanel添加到JFrame中。
在HeadLine構造函數中添加:
this.add(pane);
this.setVisible(true);
就ok了。
Java 中的show方法問題
show方法已過時,從 JDK 1.5 版開始,由 Component.setVisible(boolean) 取代。
功能是使窗口可見。如果窗口和/或其所有者還不能顯示,則都不顯示。在使窗口可見之前將驗證它。如果窗口已經可見,則此方法將窗口帶到最前面。
(java)show方法調用show的時候顯示所輸入參數
1.在你的Test類里這麼寫:
int num, phonenum;
String name,address, work;
public Test(int num, String name,int phonenum,String address,String work) {
this.num=num;
this.name=name;
this.phonenum=phonenum;
this.address=address;
this.work=work;
}
public int getNum() {
return num;
}
public int getPhonenum() {
return phonenum;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public String getWork() {
return work;
}
2、你的show()方法里這麼寫
for(int i=0;imax;i++){
System.out.print(“工號”+arr[i].getNum()+” “+”姓名”+arr[i].getName()+” “+”電話”+arr[i].getPhonenum()+” “+”地址”+arr[i].getAddress()+” “+”工作”+arr[i].getWork());
}
3、在你的add類中測試代碼:
//測試代碼
public static void main(String[] args) {
add a = new add();
a.addwork();
a.show();
}
Java問題,show是什麼意思,有什麼作用?
p1.show()和p2.show()應該是Person
類下的show()方法。具體什麼作用這個看show方法中的具體代碼,希望能幫到你望採納!
JAVA中的show加方法名()
父類型,子類型做參數,沒什麼用意就是兩個輸出
你可以把測試類中的Foods food = new Foods(); 改成Goods food = new Foods();
那麼兩個輸出的結果就是一樣哦,因為類型一樣了
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/152536.html