2016-07-04 3 views
1

Я успешно увеличил код версии. Но я хочу только увеличить его, пока я создаю подписанный apk из меню Build -> Generate signed APK. Ниже приведен мой код градиента.Код автоматической инкреции версии для генерации только подписанного APK

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.3" 
def versionPropsFile = file('version.properties') 

if (versionPropsFile.canRead()) { 
    def Properties versionProps = new Properties() 

    versionProps.load(new FileInputStream(versionPropsFile)) 

    def code = versionProps['build.version'].toInteger() + 1 

    versionProps['build.version']=code.toString() 
    versionProps.store(versionPropsFile.newWriter(), null) 

    defaultConfig { 
     applicationId "com.test" 
     multiDexEnabled true 
     versionCode code 
     versionName "1.1" 
     minSdkVersion 18 
     targetSdkVersion 23 
    } 
} 
else { 
    throw new GradleException("Could not read version.properties!") 
} 

buildTypes { 
    release { 
     //minifyEnabled false 
     //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
    } 
    debug { 
     debuggable true 
    } 
} 
dexOptions { 
    incremental true 
    javaMaxHeapSize "4g" 
    preDexLibraries = false 
}} 

И мой файл version.properties содержит следующую информацию: Minor = 7 Branch = 4 Major = 10 build.version = 73

ответ

1

Я могу сделать это за счет подключения мой код на assembleRelease задание градиента. Получил помощь от Тима blog. Ниже приводится код-

apply plugin: 'com.android.application' 
android { 
     compileSdkVersion 23 
     buildToolsVersion "23.0.3" 

     def Properties versionProps = loadVersionFile() 
     defaultConfig { 
         applicationId "com.test" 
         multiDexEnabled true 
         versionCode getCode(versionProps) 
         versionName getName(versionProps) 
         minSdkVersion 18 
         targetSdkVersion 23 
     } 
     signingConfigs { 
         release { 
           storeFile file(".../keys.jks") 
           storePassword "..." 
           keyAlias "..." 
           keyPassword "..." 
         } 
     } 


     buildTypes { 
        release { 
          signingConfig signingConfigs.release 

          //minifyEnabled false 
          //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
        } 
        debug { 
          debuggable true 
        } 
     } 
     dexOptions { 
      ... 
     } 
    } 

def loadVersionFile() { 
        def versionPropsFile = file('version.properties') 
        def Properties versionProps 
        if (versionPropsFile.canRead()) { 

        versionProps = new Properties() 
        versionProps.load(new FileInputStream(versionPropsFile)) 

        } else { 
          throw new GradleException("Could not read             version.properties!") 
        } 
        return versionProps} 

def getCode(Properties versionProps) { 
     return versionProps['build.version'].toInteger()} 

def getName(Properties versionProps) { 
     return versionProps['product.version']} 


assembleRelease << { 
     def versionPropsFile = file('version.properties') 
     def code 
     def Properties versionProps 
     if (versionPropsFile.canRead()) { 
       versionProps = new Properties() 
       versionProps.load(new FileInputStream(versionPropsFile)) 
       code = versionProps['build.version'].toInteger() + 1 
     } else { 
      throw new GradleException("Could not read version.properties!") 
     } 

     versionProps['build.version'] = code.toString() 
     versionProps.store(versionPropsFile.newWriter(), null) 
     project.android.defaultConfig.versionCode code} 

allprojects { 
repositories { 
    jcenter() 
    mavenCentral() 
    flatDir { 
     dirs 'libs' 
    } 

    maven { 
     ... 
    } 
}} 

dependencies {...} 

apply plugin: 'com.google.gms.google-services' 
+0

Где вы создали файл version.properties? Благодарю. – Canato

+1

В корне проекта. – Dhrupal

+0

Отличное решение. Позвольте мне только одно небольшое разъяснение: 'assemleRelease' не может быть напрямую адресовано при наличии нескольких проектов с разделенными файлами сборки, поскольку задача динамически создается. Вместо этого вы должны использовать 'afterEvaluate'! afterEvaluate {проект -> project.tasks.assembleRelease << { ... }} – Balage1551

1

Чтобы узнать, где вы должны поместить gradle.properties

Извлеките весь конфиг подписи Первый вариант является, чтобы извлечь все конфигурации подписи в отдельный файл пользователя. Создайте новое свойство в ваших gradle.properties:

MyProject.signing =/главная/имя пользователя/.signing/MyProject

MyProject не должны совпадать имен приложений или таким образом, вы можете на самом деле Назовите свойство, которое вам нравится. Также, если вы используете Windows, вместо \.

Поместите свое хранилище ключей в /home/username/.signing/myproject.keystore.

Теперь создайте имя файла myproject.gradle в /home/username/.signing (при необходимости создайте папку). Этот файл будет содержать вашу подпись, которая должна использоваться для подписи пакета. Это может выглядеть следующим образом:

android { 
    signingConfigs { 
    release { 
     storeFile file(project.property("MyProject.signing") + ".keystore") 
     storePassword "mypassword" 
     keyAlias "KeyAlias" 
     keyPassword "mypassword" 
    } 
    } 

    buildTypes { 
    release { 
     signingConfig signingConfigs.release 
    } 
    } 
} 

Теперь пришло время настроить фактический файл build.gradle в проекте вы хотите использовать этот подписной конф. Просто добавьте следующие строки:

if(project.hasProperty("MyProject.signing") 
    && new File(project.property("MyProject.signing") + ".gradle").exists()) { 
    apply from: project.property("MyProject.signing") + ".gradle"; 
} 

только извлечь некоторые переменные из файла

project.ext { 
    uploadRepo = 'http://....' 
    uploadUser = 'myusername' 
    uploadPass = 'mypass' 
} 

Теперь убедитесь, что вы используете только переменные, если они доступны, поставив конфигурацию в случае после того, как вы загрузили файл. Так что ваш build.gradle может выглядеть так:

if(project.hasProperty("MyProject.signing") 
    && new File(project.property("MyProject.signing") + ".gradle").exists()) { 
    apply from: project.property("MyProject.signing") + ".gradle"; 

    // Configure stuff that relies on these variables 
    uploadArchives { 
    repositories.mavenDeployer { 
     repository(url: uploadRepo) { 
     authentication(userName: uploadUser, password: uploadPass) 
     } 
    } 
    // .. whatever else you need ... 
    } 

} 

только извлечь некоторые строки из файла снова добавить путь к вашей gradle.properties (давайте делать это полный путь на этот раз):

MyProject .properties =/главная/имя пользователя/.signing/myproject.properties

if(project.hasProperty("MyProject.properties") 
    && new File(project.property("MyProject.properties")).exists()) { 

    Properties props = new Properties() 
    props.load(new FileInputStream(file(project.property("MyProject.properties")))) 

    android { 
    signingConfigs { 
     release { 
     storeFile file(props['keystore']) 
     storePassword props['keystore.password'] 
     // ... 
     } 
    } 
    } 
} 

Просто генерировать с просто свойства файла на /home/username/.signing/myproject.properties:

keystore =/path/to/my/keystore keystore.password = mypassword

Смежные вопросы