我正在使用我用来创建自己的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)");
}
我真的需要帮助,可能是之前曾在三星/索尼/摩托罗拉等公司工作的人,并分享了有关创建系统应用程序的一些知识。
答案 0 :(得分:1)
由于您的应用程序将包含在ROM中(并且应该使用平台密钥安装在/ system + signed中),因此在AOSP源代码树本身中编译应用程序可能更简单。
这样做非常简单:
就是这样:Android构建系统现在将自动构建您的应用程序,作为正常构建过程的一部分,使您可以访问所有系统功能。该应用程序还将自动存储在/ system +使用平台密钥签名。
请注意,您可以通过运行'mm'来执行应用的增量构建。
示例:
$ . build/envsetup.sh
$ lunch <your device config>
$ cd packages/app/UsbWhatever
$ mm # <-- this will rebuild your package