如何在 android 源代码中添加 Android Studio 创建的应用程序?
How to add Android Studio created applications in android source code?
我在 Android Studio 中创建了一个应用程序。现在我想将该项目添加到 android_source_code/packages/apps/ 文件夹中并构建整个 AOSP 映像,以便我的应用程序成为系统应用程序。
现在的问题是应用程序的文件夹结构为 Android Studio,这与 Eclipse 完全不同,android_source_code 希望它采用 Eclipse 文件夹结构格式。那么我该如何实现呢?
android_source_code 是否会接受 Studio 文件夹结构,或者在复制到 android_source_code 时是否需要编写脚本将 Studio 文件夹结构转换为 Eclipse 格式?
任何帮助将不胜感激。
谢谢
将 Android Studio 项目集成到 AOSP 构建中并非易事。据我所知,没有任何专用工具可以将 Android Studio 项目(使用 Gradle 构建系统)转换为 AOSP 项目(使用 make 构建系统)。
您可能想要研究的方法之一是创建您自己的 Gradle 任务,该任务将根据您 Android Studio 项目的源结构构建 Android.mk 文件(即为您的 JAVA 文件、资源、清单、AIDL 等找到所有相关的源集...并创建一个 Android.mk 文件,该文件将告诉 AOSP 构建系统准确地找到每个文件的位置)。
这种方法可能适用于相对简单的项目,但是一旦您开始使用更复杂的功能(即模块、Manifest/Resources 合并等),您会发现如果没有Gradle 构建系统的帮助。
我会考虑另一种方法:
作为预装的特权应用程序,您可以获得与系统应用程序相同的特权,并可以不受限制地执行您可能希望执行的任何任务。
为此,您可以使用 Android Studio 构建您的应用程序,并将已构建的 APK 定义为将放置在设备的 priv-app 文件夹中的 BUILD_PREBUILT 组件。
这是 Android.mk 文件的示例,它将采用您预构建的 APK 并将其作为预安装应用程序安装在设备上:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := your_app_name
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := .apk
LOCAL_PRIVILEGED_MODULE := true
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
此外,根据您的应用需要执行的操作,您可能希望在清单中声明您的应用是系统应用:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
...
android:sharedUserId="android.uid.system">
我在 Android Studio 中创建了一个应用程序。现在我想将该项目添加到 android_source_code/packages/apps/ 文件夹中并构建整个 AOSP 映像,以便我的应用程序成为系统应用程序。
现在的问题是应用程序的文件夹结构为 Android Studio,这与 Eclipse 完全不同,android_source_code 希望它采用 Eclipse 文件夹结构格式。那么我该如何实现呢?
android_source_code 是否会接受 Studio 文件夹结构,或者在复制到 android_source_code 时是否需要编写脚本将 Studio 文件夹结构转换为 Eclipse 格式?
任何帮助将不胜感激。
谢谢
将 Android Studio 项目集成到 AOSP 构建中并非易事。据我所知,没有任何专用工具可以将 Android Studio 项目(使用 Gradle 构建系统)转换为 AOSP 项目(使用 make 构建系统)。
您可能想要研究的方法之一是创建您自己的 Gradle 任务,该任务将根据您 Android Studio 项目的源结构构建 Android.mk 文件(即为您的 JAVA 文件、资源、清单、AIDL 等找到所有相关的源集...并创建一个 Android.mk 文件,该文件将告诉 AOSP 构建系统准确地找到每个文件的位置)。 这种方法可能适用于相对简单的项目,但是一旦您开始使用更复杂的功能(即模块、Manifest/Resources 合并等),您会发现如果没有Gradle 构建系统的帮助。
我会考虑另一种方法:
作为预装的特权应用程序,您可以获得与系统应用程序相同的特权,并可以不受限制地执行您可能希望执行的任何任务。
为此,您可以使用 Android Studio 构建您的应用程序,并将已构建的 APK 定义为将放置在设备的 priv-app 文件夹中的 BUILD_PREBUILT 组件。
这是 Android.mk 文件的示例,它将采用您预构建的 APK 并将其作为预安装应用程序安装在设备上:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := your_app_name
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := .apk
LOCAL_PRIVILEGED_MODULE := true
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
此外,根据您的应用需要执行的操作,您可能希望在清单中声明您的应用是系统应用:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
...
android:sharedUserId="android.uid.system">