我正在尝试实现 Android App Bundles,我需要它在 Play 商店之外工作。
- 我创建了一个包含按钮的活动的新项目
- 我通过File > New > New Module > Dynamic Feature Module 创建了一个新的 Dynamic Feature Module
现在我的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);
在一个OnClickListener
附加到我的按钮上MainActivity
。
使用Build > Build Bundle(s)/APK(s) > Build Bundle(s)一切都很好,我得到我app.aab
的文件并out.apks
使用bundletool
以下命令生成文件
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
简单地将它们拖出out.apks
在 WinRar 中打开。
我安装base-master.apk
并且工作正常,除了当我单击按钮时,因为它显然会java.lang.ClassNotFoundException
因为找不到ModuleActivity
.
当我尝试安装时,dynamic_feature-master.apk
我收到一条消息There was a problem while parsing the package
,当此消息出现时,我在 logcat 中没有看到任何明显的错误。我不知道如何前进。