Android从终端构建即时应用

时间:2018-08-25 12:11:33

标签: android android-instant-apps

我有一个具有两个模块baserestaurant的应用。我有一个用于正常应用发布的模块output,另一个用于即时应用的模块。当我使用android studio运行构建时,工作正常,但是当我运行时 ./gradlew assembleRelease似乎只有output模块被构建。是否可以从终端创建即时应用apk?我的即时应用gradle文件仅是:

apply plugin: 'com.android.instantapp'

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

内部没有任何签名配置。

3 个答案:

答案 0 :(得分:1)

Gradle build only one module为您提供了一个线索。

您可以将gradle指向com.android.instantapp模块。即时应用程序模块基本上指示implementation project()定义的模块,然后将其压缩为即时应用程序。

此基础cmd为我工作:

./gradlew instantapp:assemble

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

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

答案 1 :(得分:0)

您应该打开 Gradle窗口

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

您可以同步并运行要独立执行的任何任务。 如果您绝对需要在终端或脚本中执行此操作。 我确定在看到任务名称之后。您将能够编写命令行。

答案 2 :(得分:0)

这个问题似乎从未得到回答,所以如果有人在搜索它,那么您就可以这样做:

推荐的生产Instant App的新方法是通过Instant Enabled App Bundles。 (有关详细信息,请参见Google Developer文档)

基本上,您需要首先构建一个应用程序“ bundle”。为此,有许多步骤,但是基本上,您需要使应用程序处于建议的大小限制(10 MB)之内,并确保您没有使用任何不受支持的权限。如果您使用的是大型应用程序,则最好的方法是模块化功能,并且仅包含您想“即时”的那些功能。此应用程序的“即时”版本将是一个单独的Flavor,然后您可以在其中添加以下内容到与应用程序的Instant应用程序版本相对应的清单中。

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

完成此操作后,如果要使用CLI / Terminal进行构建,则需要使用新的bundle版本的应用程序进行构建。您可以运行./gradlew tasks来查看可用的选项,也可以运行./gradlew 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

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

现在,我们可以为我们的应用包构建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

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

ia run instant-app.apks

希望这会有所帮助!