華為應(yīng)用市場的動態(tài)特性常見問題解答

來源: HUAWEI
作者:HUAWEI
時間:2020-09-26
18013
本文介紹華為應(yīng)用市場的動態(tài)特性常見問題解答。

MzQ2OTAwNS5qcGVn.jpg

[問題一]已經(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)用市場包名。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于HUAWEI,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多