久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    如何手動完成一次APK打包?

     星星點(diǎn)點(diǎn)燈 2017-10-26 發(fā)布于廣西


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

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


    這里寫圖片描述


    1、使用Android SDK提供的aapt.exe生成R.java類文件
    2、使用Android SDK提供的aidl.exe把.aidl轉(zhuǎn)成.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對未簽名的包進(jìn)行apk簽名


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

    1. 對R文件和Manifest進(jìn)行編譯,相當(dāng)于產(chǎn)生一個目錄,用于查閱代碼和資源的位置。
    2. 對java代碼的變成產(chǎn)生class文件然后壓縮成dex文件,中間可能還有混淆的過程。
    3. 對資源文件的壓縮。
    4. 最后簽名。

    然后我們再來看下分別對應(yīng)的命令行

    1. 使用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指定程序的配置文件

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

    3. 使用dx命令,將class文件轉(zhuǎn)化成dex
      dx –dex –output=/home/tonywang/javaDemo/bin/classes.dex /home/tonywang/javaDemo/bin/

    4. 使用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

    5. 使用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

    6. 使用keytool來產(chǎn)生一個keystore文件
      keytool -genkey -alias demo_test -keyalg RSA -validity 20000 -keystore demo.keystore

    7. 使用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系統(tǒng)


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

    function findjava (){
        //友情提示,這里不是單引號,是反引號。Esc鍵下面那個按鍵
        //表示shell執(zhí)行命令
        for file int `ls $1`
        do
            if[ -d $1"/"$file ]; then
                findjava $1"/"$file
            else
                echo $1"/"$file >> /home/tonywang/javafile.txt
            fi
        done
    }
    
    dir='/home/tonywang/javaDemo/src'
    findjava $dir
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 中文丝袜人妻一区二区| 亚洲成在人线在线播放无码| 午夜无码电影888不卡| 亚洲国产精品午夜福利| 麻豆成人传媒一区二区| 国产精品黑色丝袜在线观看| 免费现黄频在线观看国产| 最近中文字幕免费MV在线视频| 国产精品自在线拍国产手机版| 日本高清色WWW在线安全| 国产 亚洲 制服 无码 中文| 久久精品国产再热青青青| 国产乱子伦一区二区三区| 亚洲欧美人成网站在线观看看| 精精国产XXXX视频在线播放| 麻豆国产传媒精品视频| 特黄A又粗又大又黄又爽A片| 国产啪视频免费观看视频| 无码熟妇人妻AV在线电影 | 国产精品毛片一区二区| 国产99青青成人A在线| 国产精品一亚洲AV日韩AV欧| 中文字字幕在线乱码视频| 亚洲一区二区三区在线观看精品中文 | 特级欧美AAAAAAA免费观看| 亚洲国产精品无码中文LV| 亚洲日本成本人观看| 日韩乱码人妻无码中文字幕视频 | 野外做受三级视频| 亚洲av日韩av综合在线观看| 国产精品色内内在线播放| 成人无码潮喷在线观看| 亚洲国产一区二区A毛片| 成人午夜电影福利免费| 成人一区二区不卡国产| 久久国产加勒比精品无码| 人妻少妇邻居少妇好多水在线| 国产精品中文字幕自拍| 色欲色香天天天综合网WWW| 久青草国产97香蕉在线视频| 中文字幕av无码免费一区|