当前位置:   article > 正文

Android Framework开发之新加一个app源码到packages/apps编译Android.mk配置_系统开发添加一个新的apk该怎么配置底层mk

系统开发添加一个新的apk该怎么配置底层mk

hi,粉丝朋友们大家好!
近来有朋友反馈在看我的android framework实战开发合集课程时候 (https://download.csdn.net/combo/detail/2202)
需要购买可以参考直接找千里马最优惠:https://blog.csdn.net/learnframework/article/details/124086882
反馈一个问题,那就是课程确实讲解了怎么预制apk的,但是否可以考虑补充讲解一下如果想增加一个app但是不是apk预制,而是源码增加的方式,即相当于我想把工程现在android studio的源码工程搬运到源码的packages/apps路径下和Launcher3等一样进行编译。

根据粉丝们反馈觉得有必要讲解,其实这个在预制apk讲解时候我就讲过大家其实可以依葫芦画瓢,参考packages/apps下面那么多应用自己写一个既可以,但既然是粉丝们又有这个要求,那千里马当然要满足。那下面就开干。。

1、准备好源码的Android Studio的工程

(主要现在大家其实都是基于Android Studio进行编译的 ,但是packages/apps下面的一般都是以前eclipse的工程,所以我相信这个应该是同学们都非常喜欢的,相当于一箭双雕)
在这里插入图片描述

这里就是大家常见的Android Studio的源码工程

2、改造Android Studio工程及编译Android.mk
其实改造也很简单主要就是需要把工程拷贝到系统源码目录/packages/apps下面:
在这里插入图片描述

大家看截图目录已经到了packages/apps,同时我们LegacyEmptyApps目录下增加了两个文件:
AndroidManifest.xml
— 这个是因为源码编译apk必须要指的,这里可以和我们真正LegacyEmptyApps/app/src/main下面的AndroidManifest.xml 一样,也可以是个空壳,因为我们还是想要和Android Studio的工程一样,不想要每次修改根目录LegacyEmptyApps/AndroidManifest.xml 所以这里就把它搞成空壳只要有个application标签就可以:

//LegacyEmptyApps/AndroidManifest.xml 存在意义只是为了编译通过,不具有真正业务

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.legacyemptyapps">

   <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true">
    </application>

</manifest>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

//LegacyEmptyApps/app/src/main/AndroidManifest.xml 这里才是真正的Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.legacyemptyapps">

   <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

Android.mk
这里Android.mk它才是真正参加系统编译关键,这里我们编写如下,其实主要是参考:packages/apps/Launcher3下面的Android.mk

下面来看看LegacyEmptyApps/Android.mk源码:

LOCAL_PATH:= $(call my-dir)#指的当前目录变量LOCAL_PATH
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional
#解释如下:
#LOCAL_MODULE_TAGS :=user eng tests optional android
#user: 指该模块只在user版本下才编译 ui
#eng: 指该模块只在eng版本下才编译 spa
#tests: 指该模块只在tests版本下才编译debug
#optional:指该模块在全部版本下都编译 cod
LOCAL_SRC_FILES := $(call all-java-files-under, app/src/main/java)#指定apk的src目录
LOCAL_RESOURCE_DIR := \
    $(LOCAL_PATH)/app/src/main/res \  #指定apk的res目录
LOCAL_FULL_LIBS_MANIFEST_FILES:=$(LOCAL_PATH)/app/src/main/AndroidManifest.xml
#指定额外的Manifest,这里的Manifest和根目录Manifest其实是合并关系,不是覆盖
LOCAL_JAVA_LIBRARIES := framework #指定依赖的jar包,这里我们其实应用简单没有依赖其他jar只有framework

LOCAL_PACKAGE_NAME := LegacyEmptyApps #要编译成apk的名字,非常非常关键
LOCAL_DEX_PREOPT := false #去除dex相关优化,这样好处就是我们编译出来apk是可以正常adb install的不然经过dex优化后,其实apk是个空壳
#LOCAL_PRIVILEGED_MODULE := true #是否放入priv-app,我们只作为普通system/app就可以

include $(BUILD_PACKAGE)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

到此就已经配置完毕,下一步就到了编译时刻:
如果只是编译apk来测试:make LegacyEmptyApps 就可以,成功会输出如下:

[100% 7/7] Install: out/target/product/generic_x86_64/system/app/LegacyEmptyApps1/LegacyEmptyApps.apk

#### build completed successfully (14 seconds) ####

  • 1
  • 2
  • 3
  • 4

但是如果想要让系统集成这个apk,那么就还需要想原来预制第三方apk一样,把LegacyEmptyApps目标加入到build路径下相关mk里面才可以,这个就看马哥之前的课程把:
android framework实战开发合集课程时候 (https://download.csdn.net/combo/detail/2202)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/296572
推荐阅读
相关标签
  

闽ICP备14008679号