Я работаю над добавлением вкусов для проекта и сталкивался с проблемой ниже. Вместо того, чтобы добавить путь, псевдоним и пароль , я добавил их в файл .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.
Я попытался,
жесткого кодирования путь
pro.properties
вместо того, чтобы сlocal.properties
Попробованная, как указано в следующей link
также попытался с изменение
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
Да, это маскирующим. Он должен быть там, где он показывает ошибку –
Я думаю, что хорошим способом найти ошибку было бы напечатать некоторый результат, если вы еще этого не сделали. поэтому после 'def localPropertiesPath = props.getProperty ('variable.prop', null);' вы должны включить строку типа 'println localPropertiesPath' и после' def propFile = file (localPropertiesPath) 'что-то вроде' println propFile' –