【发布时间】:2021-01-11 14:24:36
【问题描述】:
我有一个包含这些模块的项目:
app-
bookingfeature(即时启用) -
map(不是即时的)
app 包含一些通用代码和资源以及一个带有一些逻辑的启动 Activity,用于根据应用是否即时运行将应用路由到正确的目的地。
bookingfeature 包含一个活动和一些我想与免安装应用一起部署的片段。
map 包含应用程序的其余部分(正在进行中以将其拆分为更多模块)
如果我在 android studio 中像这样部署它,一切正常:
如果我取消选中 bookingfeature 的复选框,显然它将不起作用,因为该功能不存在。
当我创建一个应用程序包并将其上传到 Play 商店,然后在 Play 商店中点击“立即尝试”时,它的行为就像 bookingfeature 未勾选。
我可以让它表现得像bookingfeature 被勾选,以某种方式将它包含在app 模块中吗?还是我必须将所有代码从bookingfeature 移到app?
“立即尝试”按钮是否只运行app模块,有没有办法改变它?
app清单:
<manifest …>
<dist:module dist:instant="true" />
<application
…
android:name=“.App”>
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
bookingfeature清单:
<manifest ...>
<dist:module
dist:instant="true"
dist:title="@string/title_bookingfeature">
<dist:delivery>
<dist:install-time />
</dist:delivery>
<dist:fusing dist:include="false" />
</dist:module>
<application>
<activity
android:name=".booking.view.BookingActivity"/>
</application>
</manifest>
MainActivity:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil
.setContentView(this, R.layout.activity_main)
if (isInstantApp(this)) {
findNavController(R.id.main_nav_host).navigate(R.id.booking_activity)
} else {
findNavController(R.id.main_nav_host).navigate(R.id.splash_activity)
}
finish()
}
}
navigation:
...
<activity
android:id="@+id/booking_activity"
android:name="x.x.x.booking.view.BookingActivity"
app:moduleName="bookingfeature" />
<activity
android:id="@+id/splash_activity"
android:name="x.x.map.splash.SplashActivity"
app:moduleName="map" />
编辑:
当我从活动中删除finish() 时,它实际上会启动 BookingActivity 并安装功能模块。但这并不是我想要的。我希望在下载免安装应用时包含该模块。
【问题讨论】:
标签: android dynamic module instant