为现有应用程序创建即时应用程序

Create Instant app for existing application

我有一个应用程序,我想为它创建一个 instantApp。 我成功地将更改应用于我的项目并成功构建。

但是有两个问题: -我无法 运行 应用程序,错误是:

Default Activity not found

另一个问题是,当我 运行 instantApp 时,我看到一条错误消息,上面写着 Google Play Store has stoped

我有一个 app 和两个 Instant App Feature Module,分别是 basefeature

这是我的功能清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
          package="instantapp.samples.yaramobile.com.base.feature">

    <application tools:ignore="GoogleAppIndexingWarning">

        <activity android:name=".presenter.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>

            <intent-filter
                    android:autoVerify="true"
                    android:order="1">
                <action android:name="android.intent.action.VIEW"/>

                <category android:name="android.intent.category.BROWSABLE"/>
                <category android:name="android.intent.category.DEFAULT"/>

                <data android:host="test.com"/>
                <data android:pathPattern="/"/>
                <data android:scheme="https"/>
                <data android:scheme="http"/>
            </intent-filter>
        </activity>

        <activity android:name=".presenter.display.DisplayActivity"/>
        <activity android:name=".presenter.display.PermissionActivity"/>
    </application>
</manifest>

基于此 thread,如果您看到升级 IntelliJ IDEA 或 Android Studio 版本后或生成新 APK 后发生错误,您可能需要刷新 IDE 的缓存。

File -> Invalidate Caches / Restart...

这也意味着您没有在 AndroidManifest.xml 中声明的 activity 标记为应用程序启动时要启动的主要 activity。

终于找到问题和解决方法了:

问题与 AppCompact 依赖有关:

implementation 'androidx.appcompat:appcompat:1.0.2'

发生冲突,我不得不使用 api 而不是 implementation

api 'androidx.appcompat:appcompat:1.0.2'

另外还有一个房间依赖冲突:

 implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
 kapt 'androidx.lifecycle:lifecycle-compiler:2.0.0'
 implementation 'androidx.room:room-runtime:2.1.0-alpha02'
 kapt 'androidx.room:room-compiler:2.1.0-alpha02'

我也不得不换成api

 api 'androidx.lifecycle:lifecycle-extensions:2.0.0'
 kapt 'androidx.lifecycle:lifecycle-compiler:2.0.0'
 api 'androidx.room:room-runtime:2.1.0-alpha02'
 kapt 'androidx.room:room-compiler:2.1.0-alpha02'

另一个问题是关于 databinding 我刚刚在我的基本模块中添加了 databinding,但安装的模块中也需要它:

  dataBinding{
        enabled = true
    }

又是关于 room: 我必须将提供程序添加到基本模块的 manifest 中,因为我的 installed 模块中的合并清单出现错误,因为这些提供程序在 room 依赖项中使用:

<provider
        tools:replace="android:authorities"
        android:name="androidx.lifecycle.ProcessLifecycleOwnerInitializer"
        android:authorities="codenevisha.ir.mvvmwithdagger.base.lifecycle-process"
        android:exported="false"
        android:multiprocess="true"/>

不要忘记通过添加 tools:replace="android:authorities"

替换此提供程序

希望这些指南对您有用。