没有安装Android Studio的环境下,使用gradle进行命令行打包

一、下载并配置gradle的环境变量

第一种方式:(1)下载gradle,在系统变量的Path里面添加gradle下的bin路径,例如D:\Program Files\Android\AndroidStudio\gradle\gradle-2.14.1\bin

第二种方式:(1)下载gradle,在系统变量中新建一个GRADLE_HOME,填入gradle的路径D:\Program Files\Android\AndroidStudio\gradle\gradle-2.14.1,并在Path里面添加一个%GRADLE_HOME%\BIN

 如上所示,我下载的是2.14.1版本的gradle,不过现在最新的Gradle版本都到4.4了,所以看自己个人需要去下载Gradle就好了,但是要注意的是,如果您更新了Gradle版本,那环境变量的配置也要修改。

2、测试配置是否成功

进入要打包的源码项目路径下,然后输入gradle,如果显示Successful说明配置成功。

cd E:\MusicRudiment-->E:MusicRudiment>gradle

二、在项目的build.gradle中进行签名文件的代码配置(已经配置好build.gradle中签名文件的可以略过)

1、在项目的build.gradle的android{}中添加如下代码,其实也就是签名文件的别名,密码以及在本地的地址路径名称等等:

   signingConfigs {

        config {

            keyAlias 'sherry'

            keyPassword '123456'

            storeFile file(projectDir.parent +'/sherry.jks')

            storePassword '123456'

        }

    }

上面这部分是签名文件的相关值,一定要和我们打包时用到的签名文件中的参数值一一对应,否则会报错。如果是第一次打包,没有签名文件,可以先利用jdk中的keytool工具生成一个签名文件,有的话直接忽略即可。具体命令行如下(其中D:\jdk1.8.0_131是我的电脑中jdk的路径位置,至于jdk的环境变量网上一抓一大把,我就不说了。接着介绍,E:\MusicRudiment是我要打包的源码路径,最后生成的签名文件位置也在这个路径下面,方便在build.gradle文件中进行配置):

先cmd,然后输入命令

D:\jdk1.8.0_131\jre\bin>keytool -genkey -alias sherry -keypass 123456 -keyalg RSA -keysize 1024 -validity 3650 -keystore E:\MusicRudiment\sherry.jks -storepass 123456 -dname "CN=sherry, OU=xx, O=xx, L=xx, ST=xx, C=xx"

根据上面的命令行,其实大家就可以看到我签名文件的全部内容了,主要包括:别名 -alias 后面的 sherry ,密码 -keypass 后面的 123456等等,如此便会生成一个叫做 sherry.jks的签名文件了。 

2、在build.gradle文件中一般还有一个buildTypes{}的代码块,一般是放在签名文件配置的代码后面,如下所示:

buildTypes {

        release {

            minifyEnabled true

            proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }

    }

它只有正式安装包的配置,minifyEnable也就是是否最小化安装包,以及后面的混淆文件名称等。可是对于开发人员来说,我们不仅要有正式包,还有测试包,这样也便于我们和测试人员进行区分,所以呢,要把上面这段代码改成下面的样式:

    buildTypes {

        release {

            minifyEnabled true

            proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            signingConfig signingConfigs.config

        }

 

        debug {

           minifyEnabledfalse

            proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            signingConfig signingConfigs.config

        }

    }

3、最后再添加后面这两段代码,其中第一段代码是指在E:\MusicRudiment\app\build\outputs\apk路径下生成app-release.apk并重命名为sherry-...,而后面那段代码则表示在任务的最后执行一个复制的操作,把最终生成的apk复制到项目下的apks文件夹下面。

    android.applicationVariants.all {variant ->

        def file =variant.outputs[0].outputFile

        variant.outputs[0].outputFile = newFile(file.parent, file.name.replace("app-release.apk","sherry_" + defaultConfig.versionName + ".apk"))

    }

 

    tasks.getByName("build")<<{

        copy {

            from"build/outputs/apk/"+"sherry_" + defaultConfig.versionName+ ".apk"

            intoprojectDir.parent+"/apks"

        }

    }

三、使用命令行打包生成普通安装包

cmd命令进入项目路径中,执行gradle build命令行,例如E:\MusicRudiment\app>gradle build,如果出现BUILD SUCCESSSFUL就表示打包成功了。

四、使用命令行打包生成热更新补丁包

1、首先按照前面三个步骤执行,如果接入了热更新tinker(第二步添加的代码会有些差别),那么在项目的build下会有一个bakApk的文件夹,执行gradle assembleRelease或者gradle assembleDebug命令,会出现一个基准包和一个对应的R文件,例如:app-release-0225-16-21-23.apk和app-release-0225-16-21-23-R.txt。

2、在build.gradle文件中,修改如下一段代码

   

   tinkerOldApkPath = "${bakPath}/app-release-0613-12-03-04.apk"

  

   tinkerApplyMappingPath ="${bakPath}/app-release-0613-12-03-04-mapping.txt"

   

   tinkerApplyResourcePath ="${bakPath}/app-release-0613-12-03-04-R.txt"

   

    tinkerBuildFlavorDirectory= "${bakPath}/app-0613-12-03-04"

把对应的日期填进去,需要注意的是release还是debug。

3、修改完成后同样进入项目路径下,执行gradletinkerPatchRelease命令,在项目根路径\app\build\outputs文件夹中会出现一个tinkerPatch的文件夹,该文件夹中的patch_signed_7zip.apk就是我们要得到的补丁包。需要注意的是,每次打补丁包都必须是拿最原始的那个基准包进行打包,而不是我们后来打包生成的apk去打包,因为每次打补丁包的时候同样会生成对应时间的安装包。


遇到的问题:

问题一:在进入项目路径下后,输入命令行gradle build,出现了如下报错:

NDK is missing a "platforms" directory.
If you are using NDK, verify the ndk.dir is set to a valid NDK directory.  It is currently set to C:\MySpace\Working\SDK
\android-sdk\android-sdk\ndk-bundle.

If you are not using NDK, unset the NDK variable from ANDROID_NDK_HOME or local.properties to remove this warning.


这个是因为sdk的路径不对,并且没有NDK路径,解决方法是:

(1)找到项目子目录下的“local.properties”文件,打开后把原来的

sdk.dir=C\:\\MySpace\\Working\\SDK\\android-sdk\\android-sdk

改成自己的即可,例如我的是

sdk.dir=D\:\\Android\\sdk

(2)加上自己的NDK路径,同样改成我自己的

ndk.dir=D\:\\Android\\sdk\\ndk-bundle

问题二、同样是运行gradle build,报错如下:

* What went wrong:
Execution failed for task ':multi-image-selector:lint'.
> Lint found errors in the project; aborting build.


  Fix the issues identified by lint, or add the following to your build script to proceed with errors:
  ...
  android {
      lintOptions {
          abortOnError false
      }

  }

从上面的字面意思其实就看出来解决方法了,我们只需要到这个对应的项目或库文件中加上下面这一段:

android {
      lintOptions {
          abortOnError false
      }

  }


ndk.dir=D\:\\Android\\sdk\\ndk-bundle

猜你喜欢

转载自blog.csdn.net/shan286/article/details/79370059