日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何手动完成一次APK打包?----APK编译全过程

發布時間:2025/3/15 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何手动完成一次APK打包?----APK编译全过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

身為一個Android工程師,你是否有考慮過一個Android項目工程如何經過編譯壓縮變成一個APK的呢?
你又是否編寫過打包工具完成多渠道打包呢?

下面我們來解密如何完成一個APK的打包。



1、使用Android SDK提供的aapt.exe生成R.java類文件
2、使用Android SDK提供的aidl.exe把.aidl轉成.java文件(如果沒有aidl,則跳過這一步)
3、使用JDK提供的javac.exe編譯.java類文件生成class文件
4、使用Android SDK提供的dx.bat命令行腳本生成classes.dex文件
5、使用Android SDK提供的aapt.exe生成資源包文件(包括res、assets、androidmanifest.xml等)
6、使用Android SDK提供的apkbuilder.bat生成未簽名的apk安裝文件
7、使用jdk的jarsigner.exe對未簽名的包進行apk簽名


完成一次APK打包一共有7步。從功能上來分,可以分成四步。

  • 對R文件和Manifest進行編譯,相當于產生一個目錄,用于查閱代碼和資源的位置。
  • 對java代碼的變成產生class文件然后壓縮成dex文件,中間可能還有混淆的過程。
  • 對資源文件的壓縮。
  • 最后簽名。

  • 然后我們再來看下分別對應的命令行

  • 使用aapt命令編譯資源文件 aapt package -f -m -J /home/tonywang/javaDemo/gen -S res -I /home/tonywang/sdk/platforms/android-23/android.jar -M AndroidManifest.xml

    其中 -f -m -J /home/tonywang/javaDemo/gen
    代表按覆蓋的形式在gen目錄下生成帶包路徑的R.java,-S res指定資源文件 ,-I
    /home/tonywang/sdk/platforms/android-23/android.jar 指定使用的android類,-M AndroidManifest.xml指定程序的配置文件

  • 使用javac命令編譯源文件 javac -target 1.7 -bootclasspath
    /home/tonywang/sdk/platforms/android-23/android.jar -d bin
    /home/tonywang/javaDemo/gen/com/tony/demo/*.java
    /home/tonywang/javaDemo/src/com/tony/demo/*.java

    -target:表示編譯之后的class文件運行的環境版本
    -bootclasspath:表示編譯需要用到的系統庫
    -d:表示編譯之后的class文件存放的目錄 這里需要把gen下和src下面的java都編譯了。
    然后還有一個問題就是如果java文件存在多個包名下,就需要一個個列出來,很是麻煩。這里我寫了個shell腳本,把所有java名字都存在一個文本里,然后編譯對應的文件名列表就好了。腳本貼在下面
    然后使用這條命令
    javac -target 1.7 -bootclasspath /home/tonywang/sdk/platforms/android-23/android.jar -d bin @names.txt

  • 使用dx命令,將class文件轉化成dex
    dx –dex –output=/home/tonywang/javaDemo/bin/classes.dex /home/tonywang/javaDemo/bin/

  • 使用aapt命令生成資源包文件(編碼AndroidManifest.xml,resource.arsc等)
    aapt package -f -A assets -S res -I /home/tonywang/sdk/platforms/android-23/android.jar -M AndroidManifest.xml -F /home/tonywang/javaDemo/bin/javaDemo

  • 使用apkbuilder命令來編譯
    apk apkbuilder /home/tonywang/javaDemo/bin/javaDemo_unsigned.apk -v -u -z
    /home/tonywang/javaDemo/bin/javaDemo -f
    /home/tonywang/javaDemo/bin/javaDemo/classes.dex -rf
    /home/tonywang/javaDemo/src

  • 使用keytool來產生一個keystore文件
    keytool -genkey -alias demo_test -keyalg RSA -validity 20000 -keystore demo.keystore

  • 使用jarsigner簽名apk文件
    jarsigner -keystore /home/tonywang/javaDemo/demo.keystore -storepass 123456 -keypass
    123456 -signedjar /home/tonywang/javaDemo/bin/javaDemo_signed.apk
    /home/tonywang/javaDemo/bin/javaDemo_unsigned.apk

  • 至此,我們就完成了一次APK的編譯。
    如果你需要多個渠道打包,可以編寫一個Ant腳本,或者gradle腳本。
    PS.以上所有命令都基于Linux系統


    附上查找所有java文件的腳本
    findJava.sh:

    function findjava (){//友情提示,這里不是單引號,是反引號。Esc鍵下面那個按鍵//表示shell執行命令for file int `ls $1`doif[ -d $1"/"$file ]; thenfindjava $1"/"$fileelseecho $1"/"$file >> /home/tonywang/javafile.txtfidone }dir='/home/tonywang/javaDemo/src' findjava $dir

    --------------------- 本文來自 TonyW92 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/wz249863091/article/details/52551629?utm_source=copy

    總結

    以上是生活随笔為你收集整理的如何手动完成一次APK打包?----APK编译全过程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。