2017-07-20 71 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可達性莫名其妙。

您是否使用活動上下文?我會嘗試應用上下文。