如何开发Android系统/平台应用

时间:2015-08-11 22:25:01

标签: java android android-studio

我正在使用我用来创建自己的ROM(来自AOSP)的平台密钥进行签名的系统应用程序,但我必须在我的代码中做一些变通方法才能使用平台类和函数,当我尝试直接使用它们时Android Studio告诉我,我正在尝试使用隐藏的API。

我想编写像Settings,Launcher,框架这样的代码。我知道他们的来源是我自己编写的,但是我必须使用反射来调用类,尝试按照Android Studio的方式编写它们的方式。

我不想使用root命令来存档我的应​​用程序的功能,这就是我这样做的原因。我正在构建的ROM将在没有root用户访问权限的情况下安装(用户构建)。

例如,在“设置”应用中,启用MTP存储:

UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MTP, true);

但是如果我在Android Studio中使用该代码,它甚至不被认为是有效的:

http://i.stack.imgur.com/R86OW.png(截图)

我必须这样做以便存档(它目前以这种方式工作):

UsbManager UsbManagerP = (UsbManager)getSystemService(Context.USB_SERVICE);
String setCurrentFunctionMethodName = "setCurrentFunction";
Method setCurrentFunctionMethod = null;
try {
    setCurrentFunctionMethod = UsbManagerP.getClass().getMethod(setCurrentFunctionMethodName, String.class, boolean.class);
    setCurrentFunctionMethod.invoke(UsbManagerP, "mtp",true);
    Log.d("OBS", "MTP ACTIVO");
} catch (NoSuchMethodException e) {
    Log.d("OBS", "Error No Existe Metodo");
} catch (InvocationTargetException e) {
    Log.d("OBS", "Error No Existe Objetivo");
} catch (IllegalAccessException e) {
    Log.d("OBS", "Error No Se puede acceder al metodo (illegal access)");
}

我真的需要帮助,可能是之前曾在三星/索尼/摩托罗拉等公司工作的人,并分享了有关创建系统应用程序的一些知识。

1 个答案:

答案 0 :(得分:1)

由于您的应用程序将包含在ROM中(并且应该使用平台密钥安装在/ system + signed中),因此在AOSP源代码树本身中编译应用程序可能更简单。

这样做非常简单:

  • 将您的应用来源复制到'$ BUILD_ROOT / packages / apps /'(或将其引用添加到您自己的local_manifest中,以便'repo sync'处理它)
  • 将Android.mk文件添加到您的应用程序中。可以在此处找到一个示例:https://github.com/adrian-bl/android_jpolly
  • 将您的应用名称(Android.mk:LOCAL_PACKAGE_NAME)包含在您的构建$ PRODUCT_PACKAGES中(例如:device.mk - > PRODUCT_PACKAGES + = UsbWhatever)

就是这样:Android构建系统现在将自动构建您的应用程序,作为正常构建过程的一部分,使您可以访问所有系统功能。该应用程序还将自动存储在/ system +使用平台密钥签名。

请注意,您可以通过运行'mm'来执行应用的增量构建。

示例:

$ . build/envsetup.sh
$ lunch <your device config>
$ cd packages/app/UsbWhatever
$ mm  # <-- this will rebuild your package