把apk、so等文件,打包到system.img的方法

本文说的打包是指在aosp中用make -j8编译后,把自己需要的文件打包到system.img中。
这里又两种情况,第一种是apk、so是第三方提供的,已经编译好了,只要打包到system.img即可;第二种是有apk、so的源码,并且需要放在aosp中编译。


第一种情况,可以修改device.mk中的PRODUCT_COPY_FILES,这里用android4.0中自带的device/ti/panda来修改。

1.在device/ti/panda增加已经自己的文件夹,并且把需要打包的文件,拷贝到文件夹下:

  1. root@xxx:/mnt/ics-android/ics-src/device/ti/panda# ls my/*  
  2. my/app:  
  3. my.apk  
  4.   
  5. my/bin:  
  6. my.sh  
  7.   
  8. my/fonts:  
  9.   
  10. my/lib:  
  11. libmy.so  
root@xxx:/mnt/ics-android/ics-src/device/ti/panda# ls my/*
my/app:
my.apk

my/bin:
my.sh

my/fonts:

my/lib:
libmy.so
这里在device/ti/panda下增加了一个文件夹my,并且在my下面增加了app、bin、fonts、lib,对应out/target/product/panda/system下面的目录,在device.mk的最后增加:

  1. PRODUCT_COPY_FILES += \  
  2.     device/ti/panda/my/app/my.apk:system/app/my.apk \  
  3.     device/ti/panda/my/bin/my.sh:system/bin/my.sh \  
  4.     device/ti/panda/my/lib/libmy.so:system/lib/libmy.so  
PRODUCT_COPY_FILES += \
	device/ti/panda/my/app/my.apk:system/app/my.apk \
	device/ti/panda/my/bin/my.sh:system/bin/my.sh \
	device/ti/panda/my/lib/libmy.so:system/lib/libmy.so

第二种情况,同样需要修改device.mk,把需要打包的文件添加到变量PRODUCT_PACKAGES中:

  1. PRODUCT_PACKAGES += \  
  2.     libmy \  
  3.     my  
PRODUCT_PACKAGES += \
    libmy \
    my

注意这里的名字要求和模块的Android.mk中,指定生成的文件名称相同,例如
LOCAL_MODULE:= libmy
或者
LOCAL_PACKAGE_NAME := my

同时,还要求模块的Android.mk中变量LOCAL_MODULE_TAGS值为optional
LOCAL_MODULE_TAGS := optional

在aosp的build目录下有多处指定打包文件的地方,可以参考下:

  1. root@xxx:/ics-android/ics-src/build# grep PRODUCT_PACKAGES * -rn  
  2. core/main.mk:614:                       $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES))  
  3. core/Makefile:315:      $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) \  
  4. core/product.mk:68:    PRODUCT_PACKAGES \  
  5. core/base_rules.mk:93:    $(warning *    into the PRODUCT_PACKAGES section of product)  
  6. core/base_rules.mk:99:    $(warning * PRODUCT_PACKAGES section of)  
  7. target/product/large_emu_hw.mk:22:PRODUCT_PACKAGES := \  
  8. target/product/sdk.mk:20:PRODUCT_PACKAGES := \  
  9. target/product/sdk.mk:71:PRODUCT_PACKAGES += \  
  10. target/product/sdk.mk:91:PRODUCT_PACKAGES += \  
  11. target/product/sdk.mk:132:PRODUCT_PACKAGES += \  
  12. target/product/core.mk:25:PRODUCT_PACKAGES := \  
  13. target/product/core.mk:111:    PRODUCT_PACKAGES += \  
  14. target/product/full_x86.mk:29:PRODUCT_PACKAGES := \  
  15. target/product/full_x86.mk:36:PRODUCT_PACKAGES += \  
  16. target/product/full.mk:22:PRODUCT_PACKAGES := \  
  17. target/product/generic_no_telephony.mk:22:PRODUCT_PACKAGES := \  
  18. target/product/generic_no_telephony.mk:48:PRODUCT_PACKAGES += \  
  19. target/product/generic_no_telephony.mk:51:PRODUCT_PACKAGES += \  
  20. target/product/generic_no_telephony.mk:57:PRODUCT_PACKAGES += \  
  21. target/product/telephony.mk:20:PRODUCT_PACKAGES := \  
  22. target/product/full_base_telephony.mk:22:PRODUCT_PACKAGES := \  
  23. target/product/full_base.mk:22:PRODUCT_PACKAGES := \  
  24. target/board/generic/device.mk:29:PRODUCT_PACKAGES := \  
root@xxx:/ics-android/ics-src/build# grep PRODUCT_PACKAGES * -rn
core/main.mk:614:                       $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES))
core/Makefile:315:      $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) \
core/product.mk:68:    PRODUCT_PACKAGES \
core/base_rules.mk:93:    $(warning *    into the PRODUCT_PACKAGES section of product)
core/base_rules.mk:99:    $(warning * PRODUCT_PACKAGES section of)
target/product/large_emu_hw.mk:22:PRODUCT_PACKAGES := \
target/product/sdk.mk:20:PRODUCT_PACKAGES := \
target/product/sdk.mk:71:PRODUCT_PACKAGES += \
target/product/sdk.mk:91:PRODUCT_PACKAGES += \
target/product/sdk.mk:132:PRODUCT_PACKAGES += \
target/product/core.mk:25:PRODUCT_PACKAGES := \
target/product/core.mk:111:    PRODUCT_PACKAGES += \
target/product/full_x86.mk:29:PRODUCT_PACKAGES := \
target/product/full_x86.mk:36:PRODUCT_PACKAGES += \
target/product/full.mk:22:PRODUCT_PACKAGES := \
target/product/generic_no_telephony.mk:22:PRODUCT_PACKAGES := \
target/product/generic_no_telephony.mk:48:PRODUCT_PACKAGES += \
target/product/generic_no_telephony.mk:51:PRODUCT_PACKAGES += \
target/product/generic_no_telephony.mk:57:PRODUCT_PACKAGES += \
target/product/telephony.mk:20:PRODUCT_PACKAGES := \
target/product/full_base_telephony.mk:22:PRODUCT_PACKAGES := \
target/product/full_base.mk:22:PRODUCT_PACKAGES := \
target/board/generic/device.mk:29:PRODUCT_PACKAGES := \


转载自 http://blog.csdn.net/victoryckl/article/details/8034005 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将 Qt 的 .so 文件打包APK 的过程可以分为以下几个步骤: 1. 创建一个 Android Studio 项目,并在项目的 app/build.gradle 文件中添加如下配置(请根据实际情况修改路径): ``` android { ... defaultConfig { ... ndk { abiFilters "armeabi-v7a", "x86" } } ... sourceSets { main { jniLibs.srcDirs = ['path/to/Qt/libs'] } } } ``` 其中,abiFilters 指定了需要支持的 CPU 架构,jniLibs.srcDirs 指定了 Qt 的 .so 文件所在的目录。 2. 在项目的 app/src/main 目录下创建 jni 目录,并在该目录下创建 Android.mk 文件,内容如下(请根据实际情况修改目录和文件名): ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := qt LOCAL_SRC_FILES := path/to/Qt/libs/libQt5Core.so \ path/to/Qt/libs/libQt5Gui.so \ path/to/Qt/libs/libQt5Widgets.so \ path/to/Qt/libs/libQt5AndroidExtras.so include $(PREBUILT_SHARED_LIBRARY) ``` 其中,LOCAL_MODULE 指定了生成的 .so 文件的名称,LOCAL_SRC_FILES 指定了需要打包的 Qt 的 .so 文件的路径。 3. 在项目的 app/src/main 目录下创建 jni/Application.mk 文件,内容如下: ``` APP_ABI := armeabi-v7a x86 APP_PLATFORM := android-16 ``` 其中,APP_ABI 指定了需要支持的 CPU 架构,APP_PLATFORM 指定了需要支持的 Android 平台版本。 4. 在项目的 app/src/main/java 目录下创建一个 Java 类,用于加载 Qt 的 .so 文件,内容如下: ``` package com.example.myapp; public class QtLoader { static { System.loadLibrary("qt"); } } ``` 5. 在项目的 app/src/main/AndroidManifest.xml 文件中添加如下配置: ``` <application ... android:name=".QtLoader" ...> ... </application> ``` 其中,android:name 指定了在应用程序启动时加载 Qt 的 .so 文件。 6. 编译并打包 APK,使用 Android Studio 的 Build > Build APK(s) 命令即可生成 APK 文件。 注意事项: - Qt 的 .so 文件需要与 Android 平台的 CPU 架构匹配。 - Qt 的 .so 文件需要与 Android 平台的 Qt 版本匹配。 - Qt 的 .so 文件需要与 Android 平台的 GCC 版本匹配。 - Qt 的 .so 文件需要与 Android 平台的 STL 版本匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值