2016-08-09 4 views
0

Я работаю над добавлением вкусов для проекта и сталкивался с проблемой ниже. Вместо того, чтобы добавить путь, псевдоним и пароль , я добавил их в файл .properties и попытался обратиться к ним в build.gradle.Gradle, загрузка внешнего файла для настройки подписи

Так вот как я сделал,

Проект находится в мерзавца, так что другие пользователи также получить свой локальный путь к пути .properties файла, если я держу его в gradle.properties. По этой причине я добавил путь .properties в local.properties. В build.gradle Я читаю переменную от local.properties и получаю все переменные, записанные в файле свойств.

local.properties

variable.prop=C\:\\Users\\user\\signing\\project\\pro.properties 

build.gradle

buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
    } 

    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 

apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 
apply plugin: 'com.neenbedankt.android-apt' 

repositories { 
    maven { url 'https://maven.fabric.io/public' } 
} 

def versionMajor = 1 
def versionMinor = 0 
def versionPatch = 1 
def versionBuild = 1 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 

    Properties props = new Properties() 
    props.load(project.rootProject.file('local.properties').newDataInputStream()) 
    def localPropertiesPath = props.getProperty('variable.prop', null); 
    if (localPropertiesPath == null) 
     throw new GradleException("Unable to find properties file. Variable might not be added in local.properties or file may not exist in given path") 
    else { 
     def propFile = file(localPropertiesPath) 
     if (propFile.canRead()) { 
      Properties properties = new Properties() 
      properties.load(new FileInputStream(propFile)) 

      signingConfigs { 

       uat { 
        storeFile file(properties['uatKeystorePath']) 
        keyAlias properties['uatKeyAlias'] 
        keyPassword properties['uatKeyPassword'] 
        storePassword properties['uatStorePassword'] 
       } 

       release { 
        storeFile file(properties['releaseKeystorePath']) 
        keyAlias properties['releaseKeyAlias'] 
        keyPassword properties['releaseKeyPassword'] 
        storePassword properties['releaseStorePassword'] 
       } 
      } 

      defaultConfig { 
       applicationId "com.package.name" 
       minSdkVersion 15 
       targetSdkVersion 23 
       versionCode versionMajor * 1000000 + versionMinor * 10000 + versionPatch * 100 + versionBuild 
       versionName "${versionMajor}.${versionMinor}.${versionPatch}" 
       setMultiDexEnabled true 
      } 

      dexOptions { 
       javaMaxHeapSize "2048M" 
      } 

      buildTypes { 
       release { 
        minifyEnabled false 
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
        signingConfig signingConfig.release 
       } 
      } 
     } 
    } 
} 

Здесь, в линии properties.load(new FileInputStream(propFile)) всегда бросает

Malformed \uxxxx encoding.

Я попытался,

  1. жесткого кодирования путь pro.properties вместо того, чтобы с local.properties

  2. Попробованная, как указано в следующей link

  3. также попытался с изменение forward-slash, backslash и escape-char

Но до сих пор ничего не помогало. Любая помощь будет оценена

В pro.properties файл

uatKeystorePath=C:\Users\user\.signing\project\uat_keystore.jks 
uatStorePassword=StorePassword 
uatKeyAlias=AliasName 
uatKeyPassword=KeyPassword 
releaseKeystorePath=C:\Users\user\.signing\project\release_keystore.jks 
releaseStorePassword=StorePassword 
releaseKeyAlias=AliasName 
releaseKeyPassword=KeyPassword 

ответ

0

Я не могу комментировать, так что я должен ответить, но я просто хочу спросить вас, если у вас есть один и тот же опечатка в вашем реальный файл как вы попали в свой вопрос?

variable.prop=C\:\\Users\\user\\signing\\project\\pro.properties

Я имею в виду, что обратная косая черта между C и :

+0

Да, это маскирующим. Он должен быть там, где он показывает ошибку –

+0

Я думаю, что хорошим способом найти ошибку было бы напечатать некоторый результат, если вы еще этого не сделали. поэтому после 'def localPropertiesPath = props.getProperty ('variable.prop', null);' вы должны включить строку типа 'println localPropertiesPath' и после' def propFile = file (localPropertiesPath) 'что-то вроде' println propFile' –

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