android studio编译比命令行调用gradle编译快很多

从Android Studio 2.3版本之后,通过Android Studio打包普遍比通过命令行调用gradle编译要快很多。这是因为Android Studio增加了一项功能。通过Android Studio打包是,检测到连接的手机android本部大于21,就会关闭传统multidex方案,而使用速度快得多的新版多dex打包流程。

google原文如下:
https://developer.android.com/studio/build/optimize-your-build

      // To avoid using legacy multidex when building from the command line,
      // set minSdkVersion to 21 or higher. When using Android Studio 2.3 or higher,
      // the build automatically avoids legacy multidex when deploying to a device running
      // API level 21 or higher—regardless of what you set as your minSdkVersion.

传统multidex和新版多dex打包区别

传统multidex打包流程:

app:kaptGenerateStubsDevDebugKotlin
app:kaptDevDebugKotlin
app:compileDevDebugKotlin
app:javaPreCompileDevDebug
app:compileDevDebugJavaWithJavac
app:compileDevDebugSources
app:transformClassesWithStackFramesFixerForDevDebug
app:transformClassesWithDesugarForDevDebug
app:transformClassesWithDexBuilderForDevDebug
app:transformClassesWithMultidexlistForDevDebug
app:transformDexArchiveWithDexMergerForDevDebug
app:transformNativeLibsWithMergeJniLibsForDevDebug
app:transformResourcesWithMergeJavaResForDevDebug
app:packageDevDebug
app:assembleDevDebug

新版多dex打包流程:

:app:kaptGenerateStubsDevDebugKotlin
:app:kaptDevDebugKotlin
:app:compileDevDebugKotlin
:app:generateDevDebugSources
:app:javaPreCompileDevDebug
:app:compileDevDebugJavaWithJavac
:app:compileDevDebugSources
:app:transformClassesWithStackFramesFixerForDevDebug
:app:transformClassesWithDesugarForDevDebug
:app:transformClassesWithDexBuilderForDevDebug
:app:transformDexArchiveWithDexMergerForDevDebug
:app:transformNativeLibsWithMergeJniLibsForDevDebug
:app:transformResourcesWithMergeJavaResForDevDebug
:app:packageDevDebug
:app:assembleDevDebug

可以看出,传统multidex比新版多dex打包,多了一个transformClassesWithMultidexlist的任务,而这个任务耗费时间非常的长。
这就是导致命令行调用gradle命令编译比Android Studio慢的区别。

Android Studio 如何改变了打包流程

Android Studio是通过检测连接手机的参数,来向gradle注入相关属性来修改gradle编译方式。
我们可以在build.gradle中加入如下命令来查看Android Studio注入的属性:

println "projectProperties: " + project.gradle.startParameter.projectProperties

project.gradle.startParameter.projectProperties表示当前gradle启动时设置的属性。

我测试发现,注入的属性如下:

projectProperties: [
android.injected.build.density:xxhdpi, 
android.injected.build.api:26, 
android.injected.invoked.from.ide:true, 
android.injected.build.abi:arm64-v8a,armeabi-v7a,armeabi

这几个属性:
android.injected.build.density 只打包对应density的资源,
android.injected.build.api 连接手机的android版本,就是这个属性使gradle采用新版多dex打包方案

让命令行调用gradle命令编译和Android Studio一样快

只要在原本的编译命令中加入-Pandroid.injected.build.api=26参数,即可在命令行中也采用新版多dex打包方案

./gradlew -Pandroid.injected.build.api=26 assembleDevDebug
                    android studio编译比命令行调用gradle编译快很多从Android Studio 2.3版本之后,通过Android Studio打包普遍比通过命令行调用gradle编译要快很多。这是因为Android Studio增加了一项功能。通过Android Studio打包是,检测到连接的手机android本部大于21,就会关闭传统multidex方案,而使用速度快得多的新版多dex打...
				
蓝绿手机跑debug 需要gradle.properties添加一句代码 android.injected.testOnly=false 但是偶尔会有手机打出的正式包也装不上 例如 很早时候的努比亚Z1 今天OPPO R11也装不上 提示解析异常 打包的时候勾选V1就了 V2别勾 如果你之前用eclipse开发过Android app的化,转到android studio的第一反应也许就是:”编译速度有点慢”. 表现的最明显的一点就是,当我使用eclipse开发的时候,选中了auto building.这个时候  我更改了几个字符,eclipse会速度非常快的编译出一个新的apk. 而and
AndroidStudio编译配置1、概述2、命令编译2.1 查看可编译目标2.2 编译debug版本apk3、配置自动签名3.1 配置签名3.2 编译release版本4、自定义编译变体4.1 Build types4.2 Product flavors4.21 概述4.2.2 多个风味产品和风味盒结合**4.3 过滤变体4.4 创建资源集4.5 修改默认资源集4.6 编译资源集4.7 声明依赖5、增加编译依赖6、配置签名设置 AndroidStudio的编译系统编译app的资源文件和代码,打
什么是Gradle?什么是Gradle插件? Gradle 对应:gradle-wrapper.properties中的distributionUrl=https/://services.gradle.org/distributions/gradle-2.10-all.zip Gradle插件 对应:build.gradle中依赖的classpath 'com.android...
引用[1]中提到了一些关于Android Studio和NDK集成的文章,可以帮助你了解如何在Android Studio编译C/C++代码。引用[2]中提到了在local.properties文件中指定NDK路径的方法。而引用[3]则提到了在Android工程中调用C/C++函数的需求。 在Android Studio编译C/C++代码,你需要进以下几个步骤: 1. 确保你已经安装了NDK,并且在local.properties文件中指定了NDK的路径,如引用[2]所示。 2. 在你的Android项目中创建一个jni文件夹,用于存放C/C++代码。 3. 在jni文件夹中创建一个Android.mk文件,用于定义编译规则和链接库。 4. 在jni文件夹中创建一个.cpp文件,编写你的C/C++代码。 5. 在你的Android项目的build.gradle文件中添加NDK配置,指定需要编译的C/C++文件和链接库。 6. 在Android Studio的Terminal中执ndk-build命令编译生成.so文件。 7. 在你的Java代码中调用C/C++函数,实现你的需求。 通过以上步骤,你就可以在Android Studio中成功编译C/C++代码了。请参考引用[1]中的文章,了解更详细的步骤和示例代码。
星辰旋风: 有的手机是没有这个工具的,我从我的手机里提取了这个工具,上传到csdn了,你可以试试下载下来,使用adb shell push evi /system/bin/evi 命令将该工具push到android手机 /system/bin/目录即可使用。 下载地址是: https://download.csdn.net/download/xingchenxuanfeng/10605489