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加上这个架包.
第三个就是我自己编译的framework架包,记得调整一下顺序,尽量保证我们自己编译的framework在上方.