admin管理员组文章数量:1614277
如果项目要求用自己开发的应用替换安卓原生的应用,这里以Launcher为例。
目录
- 前提
- 方案1
- 方案2
- 方案3
前提
- 在自己编写的launcher的AndroidManifest.xml中必需要有以下语句
<manifest xmlns:android="http://schemas.android/apk/res/android"
package="com.xxx.mylauncher"
android:sharedUserId="android.uid.system"> ***
... ...
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" /> ***
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
... ...
</manifest>
方案1
1.注释掉原生launcher AndroidManifest.xml的category为HOME项的intent-filter,这样的话原生launcher就不会接收处理启动的intent
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!-- <category android:name="android.intent.category.HOME" /> -->
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY"/>
<category android:name="android.intent.category.LAUNCHER_APP" />
</intent-filter>
2.将编译好的mylauncher.apk文件拷贝到安卓代码树的目录下,通常是在vendor下的厂商目录中(当然也可以按需创建一个文件目录),例如
LINUX/android/vendor/xiaomi/
在此目录下新建Android.mk,内容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylauncher
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
完成后新建的目录下应该有如下两个文件
LINUX/android/vendor/xiaomi/
mylauncher.apk
Android.mk
3.将mylauncher.apk编译到rom中,在项目的mk文件中添加
# add my own launcher
PRODUCT_PACKAGES += mylauncher
注意:
在编译的输出文件查找原生launcher相关的文件进行删除后在再全编译(否则之前的launcher可能会被打包到rom中)
cd out/target/product/xxx
find . | grep -i launcher
方案2
如方案1所示第一步,如果可以找到原生launcher的AndroidManifest.xml。那么直接rm或者重命名其Android.mk,这样的话原生的launcher就不会被编译到rom中,系统启动的话可选的launcher就只有你自己开发的,所以其它步骤不变的话也是可以起到同方案1的效果。
方案3
在自己apk的Android.mk添加以下覆盖宏是比较正式的做法,表明这个apk将覆盖LOCAL_OVERRIDES_PACKAGES 列出的apk。
LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
所以方案1的步骤2的Android.mk就变成了如下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylauncher
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
include $(BUILD_PREBUILT)
之所以这么做是参考了Launcher3 的做法,我们在Launcher3的mk文件可以看到
/packages/apps/Launcher3/Android.mk
... ...
LOCAL_OVERRIDES_PACKAGES := Home Launcher2
... ...
版权声明:本文标题:Android替换系统原生应用 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728673267a1169291.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论