在Ionic项目中集成Crosswalk后构建合并的armv7/x86 apk

39
我已经将Crosswalk添加到我的ionic项目中。当我执行ionic build android时,它会输出两个单独的APK文件,一个是armv7架构,另一个是x86架构。
然而,我想要一个单一的apk文件,将这两种架构捆绑在一起。
我尝试设置BUILD_MULTIPLE_APKS = false,但仍然会生成两个单独的apk文件。
有一篇文章在这里说:

花了我一分钟,但你可以通过注释   在platforms/android/gradle.properties中的cdvBuildMultipleApks=true行来获取单个构建文件

干杯

但我的platforms/android/文件夹中没有gradle.properties文件,我有一个project.properties文件,并且其中没有要注释的cdvBuildMultipleApks=true行。
我尝试手动创建gradle.properties文件并在其中放置cdvBuildMultipleApks=false,但仍然有两个输出。
有什么思路吗? 更新: 我的Cordova版本是5.1.1 解决方案: 像@mudasserajaz和这里建议的那样,对我有用的是:
  1. 在我的/platform/android/目录中创建一个名为build-extras.gradle的文件。
  2. 在其中放置ext.cdvBuildMultipleApks=false
  3. ionic build android --release,然后就可以了。
@mudasserajaz建议变量名为cdvBuildMultipleApks=false,所以如果这对你没有起作用,请不要忘记ext

你的 Cordova 版本是什么? - Mudasser Ajaz
@mudasserajaz,我的Cordova版本是5.1.1。 - Sobhan
1
只需将<preference name="xwalkMultipleApk" value="false"/>添加到config.xml文件中即可。 - Dilhan Jayathilake
4个回答

46

我刚刚将我的config.xml的某个属性改为false,然后它就把构建出来的apk文件合并了。

来自:


来自:

<preference name="xwalkMultipleApk" value="true"/>
<preference name="xwalkMultipleApk" value="false"/>

我的系统运行ionic info命令返回的结果

Your system information:

Cordova CLI: 6.1.1
Gulp version:  CLI version 3.9.1
Gulp local:   Local version 3.9.1
Ionic CLI Version: 1.7.16
Ionic App Lib Version: 0.7.3
OS:
Node Version: v4.4.4

这对我有用。我正在使用使用Tools for Apache Cordova创建的项目,使用Visual Studio 2015。我正在使用Cordova CLI 5.4.1。我只是在我的config.xml文件的<platform name="android">部分中添加了偏好设置。 - Colin
2
这对我也起作用了,除了xwalk的<preference/>不是我的原始config.xml的一部分。 - mg1075

41

以下是执行该操作的步骤:

  1. 创建一个名为build-extras.gradle的文件,并将其放入 platforms/android/ 目录中。将cdvBuildMultipleApks=false这一行添加到build-extras.gradle中。
  2. 现在运行ionic run android,它会创建组合单个构建文件android-debug.apk

如果已定义 build-extras.gradle,则build.gradle会自动导入它。你可以看到 build.gradle 中的代码是这样做的:

def hasBuildExtras = file('build-extras.gradle').exists()
if (hasBuildExtras) {
    apply from: 'build-extras.gradle'
}

此外,这些指令在 build.gradle 的第57行中明确提到:

配置属性。通过环境变量、build-extras.gradle 或 gradle.properties 设置这些属性。

注意: 在执行这些步骤之前,请删除平台文件夹并重新安装。

观察: 完成这些步骤后,如果您需要进行分别构建,那么设置 cdvBuildMultipleApks=true 或有时注释掉它是行不通的,您只需要重新安装平台即可。(P.S 这是我的个人观察,否则只需删除 build-extras.gradle 即可。)


platforms/android/中创建build-extras.gradle文件,并在其中添加cdvBuildMultipleApks=false一行,这个方法非常有效! - Sobhan
哦,我意识到我的变量名在 build-extras.gradle 中是 ext.cdvBuildMultipleApks=false。所以如果另一个方法不起作用,请不要忘记使用 ext - Sobhan
关于你的更新,为了制作单独的构建版本,我删除了我的 build-extras.gradle 文件,然后它又生成了两个单独的文件。所以也许只需要这样做或注释掉 cdvBuildMultipleApks=false 就足够了。 - Sobhan
这些只是我在我的系统上遇到的观察。否则你是正确的,删除文件应该足够了。 - Mudasser Ajaz
3
还是这样做吗?对于我来说,尝试使用cdvBuildMultipleApks=false和ext.cdvBuildMultipleApks=false两种方式都没有起作用。 - FrancescoMussi
1
不需要这么麻烦。下一个答案在不创建任何新文件的情况下做得更好。还要确保检查@Henry Luo的答案。我最终使用了armv7 apk。当我结合了armv7和x86时,apk的大小增长了近3倍。 https://dev59.com/plwY5IYBdhLWcg3wh4Aq(下一个答案的链接,以防它改变位置) - 2xSamurai

3

截至2018年,我们可以忽略x86移动平台,因为使用英特尔CPU的手机非常少。

这有一个好处,就是APK更小。单平台APK比多平台APK要小。


0
请确保检查输出文件夹。
我注意到在添加build-extra.gradle之后,“cordova build”仍然输出了arm7和x86,但输出文件夹包含“android-release.apk”。
从输出文件夹(project/platforms/android/build/outputs/apk/)中删除arm7和x86 APK后,
它立即停止显示“corodva build”。
希望这可以帮助您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接