[問題一]已經(jīng)加載完成動態(tài)特性后如何啟動?
1、加載成功后返回
為FeatureInstallManager實例注冊監(jiān)聽器后,可以監(jiān)聽動態(tài)加載的過程。開發(fā)者可以通過監(jiān)聽器回調(diào)方法中的InstallState實例的status()返回的狀態(tài),判斷動態(tài)特性是否已經(jīng)安裝完成。例如:
if(state.status()==FeatureInstallSessionStatus.INSTALLED){
Log.i(TAG,"installed success,can use new feature");
}
2、查看動態(tài)特性是否已經(jīng)安裝
調(diào)用getAllInstalledModules()方法,查看對應(yīng)的特性是否已經(jīng)安裝。
private void getInstalledFeature(){
Set<String>moduleNames=mFeatureInstallManager.
getAllInstalledModules();
Log.i(TAG,"get all installed modules:"+moduleNames);
}
3、啟動動態(tài)特性
此處以啟動動態(tài)特性中的FeatureActivity為例:
startActivity(new Intent(this,
Class.forName("com.huawei.android.demofeature.FeatureActivity")));
[問題二]如何查看當(dāng)前動態(tài)加載過程中的有效狀態(tài)?
為FeatureInstallManager實例注冊監(jiān)聽器后,可以監(jiān)聽動態(tài)加載的過程。Dynamic Ability SDK預(yù)定義的狀態(tài)碼保存在FeatureInstallSessionStatus類中。開發(fā)者可以通過監(jiān)聽器獲取當(dāng)前動態(tài)加載的狀態(tài),并做出相應(yīng)調(diào)整。
[問題三]動態(tài)加載過程中出現(xiàn)錯誤,該怎么辦?
為FeatureInstallManager實例注冊監(jiān)聽器后,可以監(jiān)聽動態(tài)加載的過程。當(dāng)監(jiān)聽到失敗時,可以通過調(diào)用state.errorCode()方法獲取具體的錯誤碼。開發(fā)者可以根據(jù)錯誤碼判斷出當(dāng)前具體的錯誤和原因,然后再做出相應(yīng)調(diào)整即可。具體錯誤碼可參考FeatureInstallErrorCode。
[問題四]App中完成動態(tài)加載,但啟動特性時提示ClassNotFoundException。
啟動feature的某個組件時,可能寫錯了包名或類名,所以請檢查特性對應(yīng)的Activity完整名稱是否書寫正確。
此處以啟動動態(tài)特性模塊中的FeatureActivity為例:
startActivity(new Intent(this,Class.forName(“com.huawei.android.demofeature.FeatureActivity”)));
[問題五]App中完成動態(tài)加載,但啟動特性時提示java.lang.RuntimeException:Unable to start activity ComponentInfo{xxxx}android.content.res.Resources$NotFoundException:Resource ID xxxx。
假如安裝完成后,你需要馬上啟動新增動態(tài)特性的一些Activity,需要重載方法attachBaseContext()。
以FeatureActivity為例。
public class FeatureActivity extends Activity{
Override
protected void attachBaseContext(Context newBase){
super.attachBaseContext(newBase);
try{
FeatureCompat.install(newBase);
}catch(Exception e){
Log.e(TAG,"attachBaseContext error:"+e.getMessage());
}
}
}
[問題六]加載成功后啟動特性,報“UnsatisfiedLinkError:dlopen failed:library name xxxxxx too long”錯誤。
因為較低版本的Android系統(tǒng)對部分文件的路徑長度做了限制,所以建議開發(fā)者設(shè)置“包名+版本號+feature名稱+so文件名稱”的總長度不超過50個字符。
[問題七]集成Dynamic Ability SDK開發(fā)應(yīng)用并發(fā)布到華為應(yīng)用市場后,只能安裝該應(yīng)用的全量APK包。
由于動態(tài)加載SDK使用的是App Bundle技術(shù),僅支持Android 5.0及以上版本。所以,對于低于Android 5.0以下的版本,不支持動態(tài)加載,只能安裝全量APK。
[問題八]針對不同平臺(如手機,大屏,帶屏音箱)上華為應(yīng)用市場包名不同的問題,Dynamic Ability SDK是如何適配解決的?
通過應(yīng)用市場固定的service action,遍歷設(shè)備上的所有匹配應(yīng)用,取出其meta-data,如果meta-data中包含指紋和證書鏈信息并用根證書校驗通過,則認為該應(yīng)用為當(dāng)前設(shè)備上的應(yīng)用市場,返回其包名即可。如果在設(shè)備上同時裝多個應(yīng)用市場版本,則當(dāng)前策略是返回第一個找到的應(yīng)用市場包名。