[英]Android - There was a problem while parsing the package -- Overriding existing app with the corrected code
[英]Android App Bundles: there was a problem while parsing the package (dynamic feature module only)
我想實現Android應用程序包和我需要它的Play商店以外的工作。
現在我的Android項目結構如下:(省略了沒有意義的文件)
app
├ AndroidManifest.xml
├ java
│ └ my.package.name
│ └ MainAtivity
└ res
└ layout
└ activity_main.xml
dynamic_feature
├ AndroidManifest.xml
├ java
│ └ my.package.name_dynamic_feature
│ └ ModuleActivity
└ res
└ layout
└ activity_module.xml
Gradle Scripts
├ build.gradle (project)
├ bulid.gradle (app)
└ build.gradle (dynamic_feature)
我的build.gradle (app)
文件包含
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "my.package.name"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
dynamicFeatures = [":dynamic_feature"]
bundle {
language { enableSplit = true}
density { enableSplit = true}
abi { enableSplit = true}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
api 'com.android.support:appcompat-v7:28.0.0-rc02'
api 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
我的build.gradle (dynamic_feature)
文件包含
apply plugin: 'com.android.dynamic-feature'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':app')
}
為了測試目的,我請求我的dynamic_feature
與
Intent intent = new Intent()
.setClassName(MainActivity.this, "my.package.name_dynamic_feature.ModuleActivity");
startActivity(intent);
在附加到我MainActivity
的按鈕的OnClickListener
中。
使用Build > Build Bundle(s)/ APK(s) > Build Bundle(s),一切正常,我得到了app.aab
文件,並使用bundletool
通過以下命令生成out.apks
文件
java -jar bundletool-all-0.9.0.jar build-apks --bundle=D:\folder\app.aab --output=D:\folder\out.apks
然后,我提取base-master.apk
和dynamic_feature-master.apk
只是將它們拖出WinRar中打開的out.apks
。
我安裝了base-master.apk
並正常工作,除了單擊按鈕時,因為它顯然拋出java.lang.ClassNotFoundException
而不是找到ModuleActivity
。
當我嘗試安裝dynamic_feature-master.apk
我收到一條消息,指出There was a problem while parsing the package
當出現此消息時,logcat中沒有發現任何明顯的錯誤。 我不知道該如何前進。
當您使用無附加標志的adb install
,它會嘗試替換該應用程序(從而刪除基本APK)。 由於動態模塊APK缺少基礎,因此無法安裝。
要在基本APK頂部手動安裝動態模塊APK(及其配置拆分),可以使用以下命令:
adb install-multiple -r --dont-kill -p com.myapp module-master.apk module-en.apk module-armv7a.apk module-xxxhdpi.apk
我們可能應該在bundletool
添加一個便捷方法來做到這一點。 如果您有此需要,請在bundletool github project上提交功能請求。
但是請注意,它不能完全模擬通過Play Core API安裝模塊時發生的情況,尤其是不會獲得INSTALLED
回調。
今天測試模塊安裝的最佳方法是通過Play控制台的內部測試軌道。
希望能有所幫助,
僅使用winrar out.apks
文件提取apk是out.apks
。 如果您只想安裝基本apk,則可以通過以下方式進行安裝(我假設您的基本模塊的名稱為base-master
):
bundletool install-apks --apks=D:\folder\out.apks --modules="base-master"
--modules
選項使您可以僅安裝指定的模塊。 但是,我猜沒有辦法在本地測試動態交付(按需下載動態模塊),因為您的應用程序與Play Core庫進行交互。
順便說一句,如果您堅持要提取APK,可以使用bundle工具 :
bundletool extract-apks
--apks=D:\folder\out.apks
--output-dir=D:\folder2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.