andorid编译APK程序过程分析

来源:互联网 发布:关系型数据库有哪些 编辑:程序博客网 时间:2024/05/17 23:27

echo "target R.java/Manifest.java: WebViewTest (out/target/common/obj/APPS/WebViewTest_intermediates/src/R.stamp)"
rm -f out/target/common/obj/APPS/WebViewTest_intermediates/src/R.stamp
mkdir -p out/target/common/obj/APPS/WebViewTest_intermediates/src
mkdir -p out/target/common/obj/APPS/WebViewTest_intermediates/

//生成R.java
out/host/linux-x86/bin/aapt package -z -m \
-J out/target/common/obj/APPS/WebViewTest_intermediates/src \ //指定R.java输出目录
-M sdk/example/ltt-internal/WebViewTest/Gaia.xml \ //指定Gaia.xml位置
-P out/target/common/obj/APPS/WebViewTest_intermediates/public_resources.xml \ //指定public_resources.xml的输出目录,因为在编译后,同时会输出该文件描述资源的相关属性
-S sdk/example/ltt-internal/WebViewTest/res \ //指定res目录路径
-I out/target/common/obj/APPS/gaia-framework-res_intermediates/package-export.apk \ //指定该项目所引用到的其他资源,因为有些应用类APK程序会调用到Framework中的资源。因此,这里使用的就是Framework中的package-export.apk
-G out/target/common/obj/APPS/WebViewTest_intermediates/proguard_options \ //指定proguard选项的输出文件名称
--min-sdk-version 15 --target-sdk-version 15 --version-code 15 --version-name 4.0.3-eng.yts.20120803.14580

//编译源文件
mkdir -p out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/
echo "target thumb C++: libWebViewTest <= sdk/example/ltt-internal/WebViewTest/src/TestWidget.cpp"
prebuilt/linux-x86/ccache/ccache prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-g++ \
-I ./common/abi/cpp/include \
-I ./common/external/chromium \
-I ./common/external/gtest/include \
-I ./common/external/stlport/stlport \
-I ./common/external/webkit/Source/WebKit/gaia \
-I ./common/external/webkit/Source/WebKit/gaia/frameworks/webkit \
-I frameworks_gaia/base/include/gaiainternal \
-I sdk/wrapper \
-I sdk/example/ltt-internal/WebViewTest/src \
-I out/target/common/R_gaia \
-I out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates \
-I /nativehelper -isystem ./common/system/core/include -isystem ./common/hardware/libhardware/include -isystem ./common/hardware/libhardware_legacy/include -isystem ./bsp/ril/include -isystem frameworks_gaia/base/include -isystem frameworks_gaia/base/include -isystem frameworks_gaia/base/include -isystem ./common/external/skia/include -isystem ./common/external/icu4c/common -isystem ./common/external/icu4c/i18n -isystem ./sdk/include/ -isystem ./common/frameworks/base/include -isystem ./common/frameworks/base/native/include -isystem ./bsp/htcproprietary/hboot/nvidia/core/drivers/hwinc -isystem ./pdk/frameworks/base/include/opengl -isystem ./pdk/external/bluetooth/bluez/include -isystem ./pdk/frameworks/base/include -isystem pdk/gaiaproprietary/include -isystem ./common/bionic -isystem out/target/product/endeavoru/obj/include -isystem ./common/bionic/libc/arch-arm/include -isystem ./common/bionic/libc/include -isystem ./common/bionic/libstdc++/include -isystem ./common/bionic/libc/kernel/common -isystem ./common/bionic/libc/kernel/arch-arm -isystem ./common/bionic/libm/include -isystem ./common/bionic/libm/include/arm -isystem ./common/bionic/libthread_db/include -c -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -fdata-sections -funwind-tables -fstack-protector -Wa,--noexecstack -Werror=format-security -fno-short-enums
-I common/system/core/include/arch/linux-arm/ -includecommon/system/core/include/arch/linux-arm/AndroidConfig.h -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wno-psabi -mthumb-interwork -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith -DUSES_TI_MAC80211 -DHOST_BUILD=0 -DTARGET_BUILD=1 -DGAIA_VERSION=1 -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -DNDEBUG -g -Wstrict-aliasing=2 -fgcse-after-reload -frerun-cse-after-loop -frename-registers -DNDEBUG -UDEBUG -fvisibility-inlines-hidden -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith -Wsign-promo -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -DNDEBUG -UDEBUG -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -frtti -DGTEST_USE_OWN_TR1_TUPLE=1 -DGTEST_HAS_CLONE=0 -O0 -fprofile-arcs -ftest-coverage -DENABLE_MEDIALINK_HD -DENABLE_MEDIALINK_HD -DMEMDECT_LEAK=1 -MD -DQCOM -DGAIA -MF out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/TestWidget.d -o out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/TestWidget.o sdk/example/ltt-internal/WebViewTest/src/TestWidget.cpp

cp out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/TestWidget.d out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/TestWidget.P;
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$//' -e '/^$/ d' -e 's/$/ :/' < out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/TestWidget.d >> out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/TestWidget.P;
rm -f out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/TestWidget.d

//之后是对多个.cpp文件进行重复操作

//生成静态库文件
rm -f out/target/product/endeavoru/obj/STATIC_LIBRARIES/libWebViewTest-r_intermediates/libWebViewTest-r.a
echo "target StaticLib for Gaia R: libWebViewTest-r (out/target/product/endeavoru/obj/STATIC_LIBRARIES/libWebViewTest-r_intermediates/libWebViewTest-r.a)"
echo `find out/target/product/endeavoru/obj/STATIC_LIBRARIES/libWebViewTest-r_intermediates/R_gaia \( -name R.o -o -name Manifest.o \) 2> /dev/null` | xargs prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-ar crsP out/target/product/endeavoru/obj/STATIC_LIBRARIES/libWebViewTest-r_intermediates/libWebViewTest-r.a
echo "target StaticLib for Gaia-SDK-None R: libWebViewTest-r (out/target/product/endeavoru/obj/STATIC_LIBRARIES/libWebViewTest-r_intermediates/libWebViewTest-r.a)"
mkdir -p out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/LINKED/

//生成动态库文件
echo "target SharedLib: libWebViewTest (out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/LINKED/libWebViewTest.so)"
prebuilt/linux-x86/ccache/ccache prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-g++ \
-nostdlib -Wl,-soname,libWebViewTest.so -Wl,-T,build/core/armelf.xsc -Wl,--gc-sections -Wl,-shared,-Bsymbolic -Lout/target/product/endeavoru/obj/lib \
out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/OnTouchListenerChain.o
//一堆目标文件,这里都省略路径(同上)..TestWebChromeClient.o TestWebViewClient.o TestWidget.o WebViewTest.o WebWidget.o WebWidgetProxy.o WebWidgetStub.o .... \
out/target/product/endeavoru/obj/lib/crtbegin_so.o \
-Wl,--whole-archive -Wl,--no-whole-archive out/target/product/endeavoru/obj/STATIC_LIBRARIES/libWebViewTest-r_intermediates/libWebViewTest-r.a -lc -lstdc++ -lm -lstlport -llog -lutils -lapi.1 -lwebcore_cos -lgaiacore -lgaiaframework -llog -lutils -o out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/LINKED/libWebViewTest.so -Wl,-z,noexecstack -Wl,--icf=safe -Wl,--fix-cortex-a8 -fprofile-arcs -Wl,--no-undefined prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/armv7-a/libgcc.a out/target/product/endeavoru/obj/lib/crtend_so.o
echo "target Symbolic: libWebViewTest (out/target/product/endeavoru/symbols/system/lib/libWebViewTest.so)"

//处理符号信息
mkdir -p out/target/product/endeavoru/symbols/system/lib/
out/host/linux-x86/bin/acp -fp out/target/product/endeavoru/obj/SHARED_LIBRARIES/libWebViewTest_intermediates/LINKED/libWebViewTest.so out/target/product/endeavoru/symbols/system/lib/libWebViewTest.so
mkdir -p out/target/product/endeavoru/obj/lib/
echo "target Strip: libWebViewTest (out/target/product/endeavoru/obj/lib/libWebViewTest.so)"
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-strip --strip-all out/target/product/endeavoru/symbols/system/lib/libWebViewTest.so -o out/target/product/endeavoru/obj/lib/libWebViewTest.so && prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-objcopy --add-gnu-debuglink=out/target/product/endeavoru/symbols/system/lib/libWebViewTest.so out/target/product/endeavoru/obj/lib/libWebViewTest.so
echo "target Package: WebViewTest (out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk)"
mkdir -p out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/
touch out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates//dummy
(cd out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/ && jar cf package.apk dummy)
zip -qd out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk dummy
rm out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates//dummy

//编译资源文件生成APK包
out/host/linux-x86/bin/aapt package -u -z \
-c en_US,fr_FR,it_IT,es_ES,de_DE,nl_NL,cs_CZ,pl_PL,ja_JP,zh_TW,zh_CN,ru_RU,ko_KR,nb_NO,es_US,da_DK,el_GR,tr_TR,pt_PT,pt_BR,rm_CH,sv_SE,bg_BG,ca_ES,en_GB,fi_FI,hi_IN,hr_HR,hu_HU,in_ID,iw_IL,lt_LT,lv_LV,ro_RO,sk_SK,sl_SI,sr_RS,uk_UA,vi_VN,tl_PH,ar_EG,fa_IR,th_TH,sw_TZ,ms_MY,af_ZA,zu_ZA,am_ET,hi_IN,xhdpi,hdpi,nodpi -M sdk/example/ltt-internal/WebViewTest/Gaia.xml \
-S sdk/example/ltt-internal/WebViewTest/res \
-I out/target/common/obj/APPS/gaia-framework-res_intermediates/package-export.apk \
--min-sdk-version 15 --target-sdk-version 15 \
--product default --version-code 15 --version-name 4.0.3-eng.yts.20120803.145806 \
-F out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk //指定APK文件的输出路径

//添加动态库文件
rm -rf out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/lib //先删除lib目录
mkdir -p out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/lib //新建lib目录
cp out/target/product/endeavoru/obj/lib/libWebViewTest.so out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/lib //将动态库复制到lib目录
(cd out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/ && zip -qr package.apk lib/*) //使用zip命令将lib目录压缩到package.apk中
rm -rf out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/lib //删除lib目录

//对APK文件进行签名
mv out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk.unsigned
java -jar out/host/linux-x86/framework/signapk.jar build/target/product/security/platform.x509.pem build/target/product/security/platform.pk8 out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk.unsigned out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk.signed
mv out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk.signed out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk

//使用zipalign优化APK内部存储
mv out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk.unaligned
out/host/linux-x86/bin/zipalign -f 4 out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk.unaligned out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk.aligned
mv out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk.aligned out/target/product/endeavoru/obj/APPS/WebViewTest_intermediates/package.apk


原创粉丝点击