在eclipse下用gradle打包的经验总结!

第一次学习使用gradle批量打包,也是跟网上现有的经验学到的,但是感觉现有文章介绍的不够完整,在这里总结了各位的经验,再加上自己的尝试,总结了一个完整的过程,供大家参考。

参考:http://blog.csdn.net/x605940745/article/details/41242687

                 http://stackoverflow.com/questions/25264823/product-variants-multiple-activities

 

一. 按照下面图片显示的步骤从eclipse导出gradle build。

1.export

2.由于我安装了Android Studio(Android Studio本身带有gradle插件,可以直接使用),eclipse会提示使用Android Studio。

在eclipse下用gradle打包的经验总结!_第1张图片

3.选择一个工程。

在eclipse下用gradle打包的经验总结!_第2张图片

4.确认,如果工程中已经有gradle,会显示error:build.gradle already exits at this locations,这时,选择下方的“Force overriding of exiting files”即可。

5.最后给个提示。

在eclipse下用gradle打包的经验总结!_第3张图片

6.gradle build已经加到工程中了,在eclipse中选择刷新"refresh”,会出现gradle相关的文件和文件夹:gradle、gradlew、gradlew.bat。

在eclipse下用gradle打包的经验总结!_第4张图片

7.打开gradle/wrapper/gradle-wrapper.properties,按照distributionUrl提供的地址下载gradle安装包:http://services.gradle.org/distributions/gradle-1.12-all.zip

 

二、配置gradle编译环境。

1.将现在的gradle安装包gradle-1.12-all.zip解压,然后配置环境变量:

变量名:GRADLE_HOME,变量值为:F:\eclipse-SDK-3.7-win32\gradle-1.12-all(也就是你下载的Gradle文件的根目录);设置path:在后面加上F:\eclipse-SDK-3.7-win32\gradle-1.12-all\bin。

gradle打包需要Android SDK和JDK,eclipse中配置配置了这两个SDK的路径并不等于gradle能够使用,需要设置系统环境变量才行。

变量名:ANDROID_HOME,变量值:F:\eclipse-SDK-3.7-win32\android-sdks\andrid-sdks(Android SDK的安装目录)

变量名:JAVA_HOME,变量值:F:\eclipse-SDK-3.7-win32\Java1.7(JDK的安装目录)。

在eclipse下用gradle打包的经验总结!_第5张图片

在eclipse下用gradle打包的经验总结!_第6张图片

在eclipse下用gradle打包的经验总结!_第7张图片

环境配置好了就可以编译了。

 

三、编译

1.运行在cmd中运行gradle -v来判断是否设置成功 如下图

2.编译。确定安装成功之后,就可以运行gradle命令来打包了。将cmd命令定位到工程的根目录,然后运行gradle bulid。如下图。

在eclipse下用gradle打包的经验总结!_第8张图片

出现“BUILD SUCCESSFUL”后,表示编译成功。

在eclipse中选择刷新"refresh”,工程中会出现build文件夹,在build/outputs/apk目录下有编译好的apk。如下图。

在eclipse下用gradle打包的经验总结!_第9张图片

 

四、批量打包

想实现批量打包,需要配置build.gradle文件。原始的build.gradle文件如下:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "22.0.1"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

需要在sourceSets下配置:

     app1{ 
         manifest.srcFile 'tests/AndroidManifest1.xml' 
     }  
     app2{ 
         manifest.srcFile 'tests/AndroidManifest2.xml' 
     } 
        instrumentTest.setRoot('tests') 

在工程路径下新建tests文件夹,并新建AndroidManifest1.xml、AndroidManifest2.xml,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="
http://schemas.android.com/apk/res/android"
    package="com.example.erase1" >

<!-- package="com.example.erase2" > -->

</manifest>

在eclipse下用gradle打包的经验总结!_第10张图片

在android下配置:

productFlavors { 
        useOldManifestMerger true   //使用原来的manifest中的配置项。
        
  app1{ 
         //这里可以配置不同的包名 
         applicationId="com.example.erase1"
  } 
  app2{ 
      applicationId="com.example.erase2"
  } 
 }

配置好的build.gradle是这个样子的:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "22.0.1"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
       
        app1{ 
         manifest.srcFile 'tests/AndroidManifest1.xml' 
     } 
     app2{ 
         manifest.srcFile 'tests/AndroidManifest2.xml' 
     } 
        instrumentTest.setRoot('tests') 
    }
   
    productFlavors { 
        useOldManifestMerger true
       
  app1{ 
         //这里可以配置不同的包名 
         applicationId="com.example.erase1"
  } 
  app2{ 
      applicationId="com.example.erase2"
  } 
 }
}

然后重新运行gradle bulid,编译成功后,会在build/outputs/apk下生成新的apk,如下图:

在eclipse下用gradle打包的经验总结!_第11张图片

五、以上步骤都完成之后,就实现批量打包了。可将不同的apk安装到手机上验证他们的包名是不是跟你设置的一样,这个我已经验证过了。如下图:

 

至此,批量打包就实现了,这只是最基础的功能。还有进阶的技能,比如打包后,每个apk的名字、图标、UI素材会有差别等等,这些需要进一步学习。

 

另外,如果工程中含有.9的图片,在编译过程中会出现以下error:

        F:\eclipse-SDK-3.7-win32\workapace\smart_remote_common_SVN_151203\res\drawable-hdpi\second_under_num.9.png: libpng warning: iCCP: Not recogniz
ing known sRGB profile that has been edited
        ERROR: 9-patch image F:\eclipse-SDK-3.7-win32\workapace\smart_remote_common_SVN_151203\res\drawable-hdpi\second_under_num.9.png malformed.
               Frame pixels must be either solid or transparent (not intermediate alphas).
               Found at pixel #13 along top edge.

给图片包一层边就可以了,就是在图片的每个边上增加一层像素。

你可能感兴趣的:(eclipse,gradle,经验)