android使用@hide标签的api

android源码中有些api加了@hide标签.这些api在sdk下是无法使用的.

如果我们有整个源码环境,可以打破这个限制.


1.重编sdk

直接envsetup,然后make PRODUCT-sdk-sdk ,编译一个新的sdk出来,android.jar这个文件替换掉sdk里的android.jar

2.重编framework架包

这种原理也是编一个架包出来,在configure build path中加入这个架包即可.


以pm中的installpackage举例

 /**
     * @hide
     *
     * Install a package. Since this may take a little while, the result will
     * be posted back to the given observer.  An installation will fail if the calling context
     * lacks the {@link android.Manifest.permission#INSTALL_PACKAGES} permission, if the
     * package named in the package file's manifest is already installed, or if there's no space
     * available on the device.
     *
     * @param packageURI The location of the package file to install.  This can be a 'file:' or a
     * 'content:' URI.
     * @param observer An observer callback to get notified when the package installation is
     * complete. {@link IPackageInstallObserver#packageInstalled(String, int)} will be
     * called when that happens.  observer may be null to indicate that no callback is desired.
     * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
     * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}.
     * @param installerPackageName Optional package name of the application that is performing the
     * installation. This identifies which market the package came from.
     */
    public abstract void installPackage(
            Uri packageURI, IPackageInstallObserver observer, int flags,
            String installerPackageName);
首先去掉@hide标签

然后在android根目录make framework或者在framework目录下mm启动framework编译,拷贝linux编译生成的out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar到本机.在buildpath加上这个架包.

android使用@hide标签的api_第1张图片

第三个就是我自己编译的framework架包,记得调整一下顺序,尽量保证我们自己编译的framework在上方.


你可能感兴趣的:(android使用@hide标签的api)