【问题标题】:Android build instant app from terminalAndroid 从终端构建即时应用程序
【发布时间】:2018-08-25 12:11:32
【问题描述】:

我有一个应用程序,它有 2 个模块 base 和 restaurant。我有一个模块output 用于正常的应用程序发布,另一个用于即时应用程序。当我使用 android studio 运行构建时,它工作正常,但是当我运行时 ./gradlew assembleRelease 似乎只构建了 output 模块。是否可以从终端创建即时应用程序 apk?我的免安装应用 gradle 文件只是:

apply plugin: 'com.android.instantapp'

dependencies {
    implementation project(':base')
    implementation project(':restaurant')
}

内部没有任何签名配置。

【问题讨论】:

    标签: android android-instant-apps


    【解决方案1】:

    Gradle build only one module 给你一个线索。

    您可以将 gradle 指向 com.android.instantapp 模块。 Instant App 模块基本上指示要组装哪些模块,那些由implementation project() 定义的模块,并将它们压缩为 Instant App。

    这个基础 cmd 对我有用:

    ./gradlew instantapp:assemble

    然后 ia zip 文件将包含在 instantapp /build/output/apk/ 目录中。

    但即使您运行./gradlew assemble,您仍然应该在同一目录中找到您的免安装应用 apks.zip。

    【讨论】:

      【解决方案2】:

      您应该打开 Gradle 窗口。

      查看 -> 工具窗口 -> Gradle。

      您可以同步和运行您想要(独立)执行的任何任务。 如果您绝对需要在终端或脚本中执行。 我敢肯定,在看到任务的名称后。您将能够编写命令行。

      【讨论】:

        【解决方案3】:

        这个问题好像从来没有人回答过,所以如果其他人正在搜索它,你可以去:

        生成 Instant App 的新推荐方法是通过 Instant Enabled App Bundles。 (详见Google Developer文档)

        基本上,您需要先构建一个应用“捆绑包”。为此,有许多步骤,但基本上您需要使您的应用程序在建议的大小限制(10 MB)内,并确保您没有使用任何不受支持的权限。如果您正在使用更大的应用程序,最好的方法是将您的功能模块化,并且只包含您希望“即时”的功能。您的应用程序的此“即时”版本将是一个单独的 Flavor,您可以从那里将以下内容添加到与您的应用程序的即时应用程序版本相对应的清单中。

        <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
        </manifest>
        

        完成此操作后,如果您想使用 CLI/Terminal 进行构建,则需要使用应用程序的新 bundle 版本进行构建。你可以运行./gradlew tasks 来查看你有哪些可用的选项,或者只运行./gradlew bundle 来运行它们。

        接下来,要进行测试以确保您的 app bundle 正确完成,您将需要更多工具。 bundletool(由 Google here 提供)和 ia 工具,位于您的 $ANDROID_HOME/extras/google/instantapps/ 目录中。 (只需在你的路径上拍打它或有一个别名指向它)。

        使用这两种工具后,您将需要访问免安装应用的签名密钥。我还没有尝试过,但您可能可以使用debug 签名密钥进行测试。只是为了快速演示如何使用CLI 构建密钥,这里是:

        apksigner sign --ks my-instant-app-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
        

        注意:请勿将其用于生产,这只是演示。

        现在,我们可以为我们的 app bundle 构建 APK 并对其进行签名。

        $ java -jar bundletool-all-*.jar build-apks \
        //1
        --bundle=app.aab \
        //2
        --output=app.apks \
        //3
        --connected-device \
        //4
        --ks=your-keystore-path \
        //5
        --ks-pass=pass:your-keystore-password \
        //6
        --ks-key-alias=your-key-alias \
        //7
        --key-pass=pass:your-key-password
        

        注意:以上摘自以下tutorial。

        接下来,通过运行以下命令检查您的免安装应用是否正确完成:

        ia check instant-app.apks
        

        apks 末尾的 s 不是拼写错误。如果全部签出,您可以使用以下命令运行应用程序:

        ia run instant-app.apks
        

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多