进入 %lineage%/packages 目录
一.直接内置apk文件到lineageos
1.目录准备
创建一个文件夹(名称自定义目录,如“happy/my”),将准备好的apk文件(如“my.apk”)放入。
创建 Android.mk 文件。
目录结构如下:
1 2 3 4 5 6 |
root@ubuntu:~/lineageOs/packages/happy/my$ ls -la total 58480 drwxrwxrwx 2 root root 4096 1月 1 18:22 . drwxrwxr-x 3 root root 4096 1月 2 02:25 .. -rwxrw-rw- 1 root root 755 1月 1 18:29 Android.mk -rwxrw-rw- 1 root root 59870272 11月 3 07:35 my.apk |
2.Android.mk内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) # 生成的模块自定义名称 LOCAL_MODULE := myapk # 生成的模块类型 LOCAL_MODULE_CLASS := APPS # 生成的模块后缀名,此处为apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) # 设置模块tag,tags取值可以为:user debug eng tests optional # optional表示全平台编译 LOCAL_MODULE_TAGS := optional # LOCAL_PRIVILEGED_MODULE := true LOCAL_BUILT_MODULE_STEM := package.apk # 设置源文件。如果上面的LOCAL_MODULE对应文件名,可使用$(LOCAL_MODULE).apk LOCAL_SRC_FILES := my.apk # 设置签名,PRESIGNED表示保持apk原有签名;platform表示系统签名 LOCAL_CERTIFICATE := PRESIGNED # 此处表示预编译方式。BUILD_PREBUILT把文件当成编译项目 include $(BUILD_PREBUILT) |
3.将apk模块注册到系统
lineageOs中,可以加到和Settings模块相同的地方。
文件位置:build/make/target/product/handheld_product.mk
添加 myapk 加到 PRODUCT_PACKAGES 项中:
1 2 3 4 5 6 7 8 9 |
PRODUCT_PACKAGES += \ Browser2 \ Calendar \ Camera2 \ ... n个 ... \ SystemUI \ WallpaperCropper \ frameworks-base-overlays \ myapk |
4.编译系统
$ croot
$ breakfast oneplus3
$ brunch oneplus3
out/target/product/jason/ 下得到系统卡刷包。
二.把androidstudio项目中的依赖模块编译为jar
1.目录准备
在 happy 下新建 myjar 文件夹。把AndroidStudio里开发的java模块中 lib、src及rules文件 放入。
在 happy/myjar 创建 Android.mk文件。
目录结构如下:
$ ls -la
total 58480
drwxrwxrwx 2 root root 1月 1 18:22 .
drwxrwxr-x 3 root root 1月 2 02:25 ..
-rwxrw-rw- 1 root root 1月 1 18:29 Android.mk
-rwxrw-rw- 1 root root 11月 3 07:35 lib
-rwxrw-rw- 1 root root 11月 3 07:35 src
2.Android.mk内容
1 2 3 4 5 6 7 |
LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:=myjar LOCAL_MODULE_TAGS:=optional LOCAL_SRC_FILES:=$(call all-java-files-under, src) #源码,确定src文件夹 include $(BUILD_STATIC_JAVA_LIBRARY) # [a]编译为静态库jar include $(BUILD_JAVA_LIBRARY) # [b]编译为共享库(动态库)jar |
3.执行 mm指令编译
include $(BUILD_STATIC_JAVA_LIBRARY) 编译结果在 %lineage%/out/target/common/obj/JAVA_LIBRARIES/模块名_intermediates/
include $(BUILD_JAVA_LIBRARY) 编译结果会多1个目录在 %lineage%/out/target/product/generic_x86/system/framework/
4.编译系统。
lunch jason
三.把androidstudio项目中的app模块编译为apk
1.目录准备
在 happy 下新建 myapk,放入应用源码的 lib、src及rules文件
在 happy/myapk创建 Android.mk 文件。
2.Android.mk 文件
1 2 3 4 5 6 7 8 9 10 11 |
LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:=myapk LOCAL_MODULE_TAGS:=optional LOCAL_STATIC_JAVA_LIBRARIES:=myjar # [a]上一步编译出的静态jar的模块名,apk内嵌 LOCAL_JAR_LIBRARIES:=myjar # [b]上一步编译出的共享jar的模块名,apk不内嵌,调用时到framework中查找 LOCAL_PACKAGE_NAME:=package.pak # 编译出的文件名 LOCAL_SRC_FILES:=$(call all-java-files-under, src) #源码src文件夹 LOCAL_RESOURCE_DIR:=src/main/res # 资源文件路径 LOCAL_MANIFEST_FILE:=src/main/AndroidManifest.xml # 清单文件 include $(BUILD_PACKAGE) # 编译为APK |
3.执行 mm指令编译
编译结果在 %lineage%/out/target/product/generic_x86/system/app/模块名/
四.把cpp代码编译为so
1.目录准备
在 happy 下新建 myso 文件夹,放入 c源码文件、jni.h文件
在 happy/myso 创建 Android.mk 文件。
2.Android.mk文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:=my-log-so LOCAL_SRC_FILES:=\ #源码文件 mycpp.cc \ otcpp.cc LOCAL_C_INCLUDES:=\ external/libcxx/include \ # 系统头文件iostream所在的路径。可以在源码目录 find ./ -name "iostream" $(LOCAL_PATH)/myutil # 相对路径的其它头文件目录。通常在c代码中指定 LOCAL_SHARED_JAVA_LIBRARIES:=\ # 依赖库 libc++ \ 其它库 include $(BUILD_SHARED_LIBRARY) # 编译为so include $(BUILD_EXECUTABLE) # 编译为可执行文件 include $(call all-makefiles-under, $(LOCAL_PATH)) # 查找子目录内有没有须要编译的库 |
3.下执行 mm指令编译
include $(BUILD_SHARED_LIBRARY) 编译结果在 %lineage%/out/target/product/generic_x86/system/lib/
include $(BUILD_EXECUTABLE) 编译结果在 %lineage%/out/target/product/generic_x86/system/bin/
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/3890.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设