2017-07-20 164 views
1

我在玩AOSP,并尝试应用OTA包RecoverySystem.installPackage java.lang.NullPointerException

1)。我为Google Pixel构建了AOSP并安装它

2)。我创建简单的应用程序,其下载OTA包,并试图将其应用 (它是基于这篇文章:http://jhshi.me/2013/12/13/how-to-apply-downloaded-ota-package/index.html

我打电话 RecoverySystem.installPackage(getContext(), file);,它让我

java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.os.IRecoverySystem.setupBcb(java.lang.String)' on a null object reference 
    at android.os.RecoverySystem.setupBcb(RecoverySystem.java:895) 
    at android.os.RecoverySystem.installPackage(RecoverySystem.java:496) 
    at android.os.RecoverySystem.installPackage(RecoverySystem.java:421) 

任何人都可以点我该如何解决它?

+0

我注意到同样的事情,你找到一个解决方案吗? – Alex

+0

@亚历克斯,是的,但我忘记了我是如何解决它的。据我记忆,权限有问题。您必须授予权限: '' '' 最后一个,可以只授予系统应用程序,因为我记得 – Alexander

+0

顺便说一句,你可以检查这个有用的例子:https://github.com/CopperheadOS/platform_packages_apps_Updater 这是一个CopperheadOS的内部更新实施 – Alexander

回答

1

据我所看到的,你的错误来自这段代码:

在RecoverySystem.java:

RecoverySystem rs = (RecoverySystem) context.getSystemService(
       Context.RECOVERY_SERVICE); 
if (!rs.setupBcb(command)) { 
    throw new IOException("Setup BCB failed"); 
} 

....

/** 
* Talks to RecoverySystemService via Binder to set up the BCB. 
*/ 
private boolean setupBcb(String command) { 
    try { 
     return mService.setupBcb(command); 
    } catch (RemoteException unused) { 
    } 
    return false; 
} 

在第一一段代码,如果评价,你的错误是rs它有mService成员为null。在''setupBcb`方法中使用它。 所以它看起来像你使用的上下文没有Context.RECOVERY_SERVICE可达性莫名其妙。

您是否使用活动上下文?我会尝试应用上下文。