【问题标题】:How to develop Android System/Platform Apps如何开发 Android 系统/平台应用程序
【发布时间】:2015-08-11 22:25:00
【问题描述】:

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

我想编写设置、启动器、框架之类的代码。我知道他们的源代码就是我自己编写的方式,但我必须使用反射调用类,尝试按照它们的编写方式而不是在 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)");
}

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

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    由于您的应用程序将包含在 ROM 中(并且应该安装在 /system + 使用平台密钥签名),因此在 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
    

    【讨论】:

    • 嗨,感谢您的回复,我已经知道了,我在询问使用 Android Studio(或者可能是 Eclipse 或其他?)的平台应用程序开发,因为 Android Studio 在正常设置(我唯一一个知道)不提供对平台 API 的访问权限(函数/类/常量被隐藏并在构建时出错)以快速调试应用程序我当前构建 APK 并使用我的 ROM 的平台密钥对其进行签名然后替换应用程序(使用具有 root 访问权限的 Eng 版本)。我想要澄清的是一个有用的IDE来开发这种类型的应用程序(系统/平台应用程序)。
    猜你喜欢
    • 2014-04-11
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    相关资源
    最近更新 更多