"cordova build android"실행-android : fontVariationSettings 및 android : ttcIndex 속성을 찾을 수 없습니다.
을 실행 cordova build android --buildConfig xxxx --release
하면 다음 오류가 발생합니다.
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:fontVariationSettings
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:ttcIndex
이상한 점은 컴파일을 위해 두 대의 macOS 컴퓨터를 사용하는데, 같은 코드에 대해 그중 하나에서만이 오류가 발생한다는 것입니다.
다음은 ./gradlew cdvPrintProps
두 컴퓨터에서 얻은 결과입니다 .
:cdvPrintProps
cdvCompileSdkVersion=26
cdvBuildToolsVersion=27.0.3
cdvVersionCode=null
cdvMinSdkVersion=21
cdvBuildMultipleApks=true
cdvReleaseSigningPropertiesFile=release-signing.properties
cdvDebugSigningPropertiesFile=null
cdvBuildArch=null
computedVersionCode=152045989
computedArmv7VersionCode=1520459892
computedX86VersionCode=1520459894
다음은 사용 된 플러그인 목록입니다.
$ cordova plugins list
cordova-custom-config 5.0.2 "cordova-custom-config"
cordova-fabric-plugin 1.1.10 "cordova-fabric-plugin"
cordova-open-native-settings 1.5.0 "Native settings"
cordova-plugin-app-event 1.2.1 "Application Events"
cordova-plugin-app-version 0.1.9 "AppVersion"
cordova-plugin-camera 2.4.1 "Camera"
cordova-plugin-compat 1.2.0 "Compat"
cordova-plugin-console 1.1.0 "Console"
cordova-plugin-crosswalk-webview 2.4.0 "Crosswalk WebView Engine"
cordova-plugin-datepicker 0.9.2 "DatePicker"
cordova-plugin-device 2.0.1 "Device"
cordova-plugin-email 1.2.7 "EmailComposer"
cordova-plugin-file 4.3.3 "File"
cordova-plugin-file-transfer 1.6.3 "File Transfer"
cordova-plugin-inappbrowser 1.7.2 "InAppBrowser"
cordova-plugin-network-information 1.3.4 "Network Information"
cordova-plugin-secure-storage 2.6.8 "SecureStorage"
cordova-plugin-splashscreen 4.1.0 "Splashscreen"
cordova-plugin-statusbar 2.4.1 "StatusBar"
cordova-plugin-whitelist 1.3.3 "Whitelist"
cordova.plugins.diagnostic 3.9.2 "Diagnostic"
de.appplant.cordova.plugin.local-notification 0.8.5 "LocalNotification"
ionic-plugin-keyboard 2.2.1 "Keyboard"
이 문제를 어떻게 해결할 수 있습니까?
build-extras.gradle 에 다음을 입력하십시오.
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
Google 은 2 개의 새로운 속성 (android : fontVariationSettings 및 android : ttcIndex)을 추가하는 com.android.support:support-v4 의 새 버전 28.0.0-alpha1 을 출시했습니다 . 일부 플러그인은 원치 않는 비 호환성을 초래하는 최신 안드로이드 지원 라이브러리를 사용하고 있습니다.
옵션 1 : 설치 코르도바 - 안드로이드 - 지원 - Gradle을 출시 플러그인을.
"다른 플러그인에서 지정한 다양한 버전의 Android 지원 라이브러리를 특정 버전에 맞추는"잘 문서화 된 플러그인입니다. 파괴적인 동작없이 테스트되었습니다.
cordova plugin add cordova-android-support-gradle-release --fetch
전체 옵션 세트에 대한 문서를 읽으십시오. Readme
옵션 2 : platform / android 아래의 build.gradle 에 다음 코드 스 니펫 추가
/**
IMPORTANT - Manually added
Problem: 8 March 2018 - Google released version support-v4:28.0.0-alpha1
which breaks the project with following error: unable to find attribute
android:fontVariationSettings and android:ttcIndex
Effect: Force a specific version of the library
*/
configurations.all {
resolutionStrategy.force 'com.android.support:support-v4:27.1.0'
}
경고 : Android 플랫폼을 제거 / 추가하면 build.gradle의 코드를 덮어 씁니다. 어떤 이유로 플러그인을 사용하고 싶지 않거나 어떤 식 으로든 작동하지 않는 경우, 대신 후크를 만들고 매번 파일을 덮어 씁니다. 여기에서 두 번째 댓글을 확인 하세요 .
문제가 지속되면 다음을 시도해보십시오.
cordova platform rm android
cordova platform add android
또는
테스트하는 기기에 이전 버전의 앱이 설치되어 있지 않은지 확인하세요 . 기존 버전을 다운 그레이드하려고 할 때 모호한 오류가 표시되기 때문입니다.
나에게도 같은 오류가 발생합니다. 분명히 새 버전의 com.android.support:support-v4
라이브러리가 출시되었으며 내가 사용하는 플러그인 com.android.support:support-v4:+
은 plugin.xml
. 이 +
표시는 다른 플러그인과 호환되지 않는 것으로 보이는 최신 버전 (28.0.0)을 얻게 될 것임을 의미합니다.
모든 플러그인 종속성을에서 com.android.support:support-v4:+
로 변경하여 개발 버전을 빌드 할 수있었습니다 com.android.support:support-v4:27.1.0
. 또한 나는 ionic cordova platform remove android
및 ionic cordova platform add android
. 적어도 개발에 도움이되기를 바랍니다.
난 그냥 플랫폼 / 안드로이드 폴더로 이동하여이 문제를 해결하고 편집 한 project.properties
) 파일을 교체 com.android.support:support-v4:+
와 함께 com.android.support:support-v4:27.1.0
.
빌드를 실행하기 위해 해당 문제에 대한 빠른 수정이 필요한 경우에는 다음 행을 platform / android / build.gradle 파일에 추가 할 수 있습니다.
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
어쨌든 여기에서 버전을 설정하는 것은 지속 가능한 수정이 아닙니다.
이상하지만 동일한 버전으로 아래 줄을 추가하면 작동합니다.
이것은 platforms/android/build.gradle
파일의 관련 줄입니다 .
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
// SUB-PROJECT DEPENDENCIES START
debugCompile(project(path: "CordovaLib", configuration: "debug"))
releaseCompile(project(path: "CordovaLib", configuration: "release"))
compile "com.android.support:support-v4:26.+"
compile "com.android.support:appcompat-v7:26.+"
// SUB-PROJECT DEPENDENCIES END
}
// ADDED THESE LINES
configurations.all {
resolutionStrategy.force 'com.android.support:support-v4:26+'
}
내 프로젝트에서 'cordova-plugin-crosswalk-webview'플러그인 때문에 문제가 발생했습니다.
동일한 오류가 있지만 코르도바 빌드에는 없습니다. com.android.support:appcompat-v7
및 종속성의 새 버전 . 그러나 호환되지 않는 버전은.에 종속 된 com.android.support:appcompat-v7
세 번째 패키지에 있으므로 @avmatte 의 솔루션으로 세 번째 패키지를 수정할 수 없습니다 .
@ Sai Teja 의 솔루션을 사용하여 호환되지 않는 패키지를 찾으십시오.
gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath
그런 다음 다음과 같이 수정했습니다.
configurations.all {
resolutionStrategy {
force 'com.android.support:support-compat:{the_same_version}'
force 'com.android.support:appcompat-v7:{the_same_version}'
force 'com.android.support:support-core-utils:{the_same_version}'
force 'com.android.support:support-core-ui:{the_same_version}'
force 'com.android.support:support-fragment:{the_same_version}'
force 'com.android.support:support-annotations:{the_same_version}'
...
}
}
위의 코드는 종속성 버전을 강제합니다.
나는 같은 오류에 직면했다. com.android.support:support-v4:+ 의 플러그인 디렉토리에서 전체 조사를 수행 하고 정적 버전 코드로 대체했습니다.
나를 위해 com.android.support:support-v4:23.4.0 은 잘 작동했습니다. 그때 안드로이드 플랫폼을 제거하고 다시 추가 할 필요가 없었습니다.
다음은 플랫폼 디렉토리가 재 구축 될 때 유지되는 문제를 쉽게 고칠 수있는 방법이며 범인을 찾기 위해 모든 플러그인을 거칠 필요가 없습니다. build-extras.gradle
다음 내용 으로 파일 을 만듭니다 .
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
그런 after_platform_add/010_copy_build_extras.js
다음 다음 내용으로 파일 을 만듭니다 .
#!/usr/bin/env node
var fs = require('fs');
var rootdir = process.argv[2];
var android_dir = `${rootdir}/platforms/android`;
var gradle_filename = 'build-extras.gradle';
var gradle_file = `${rootdir}/${gradle_filename}`;
if (fs.existsSync(android_dir) && fs.existsSync(gradle_file)) {
fs.createReadStream(gradle_file)
.pipe(fs.createWriteStream(`${android_dir}/${gradle_filename}`));
}
이제 Android 플랫폼을 다시 만들고 고정 된 지원 라이브러리를 사용합니다.
Ionic Forum에서 해결책을 찾았습니다.이 솔루션은 저에게 효과적이었습니다.
운영:
이온 코르도바 플랫폼 rm 안드로이드
운영:
이온 코르도바 플랫폼 add android@8.0.0
운영:
이온 코르도바 플러그인 cordova-plugin-androidx 추가
운영:
ionic cordova plugin add cordova-plugin-androidx-adapter
gradle.properties에 다음이 있는지 확인하십시오.
cdvMinSdkVersion = 19
build.gradle에 다음이 있는지 확인하십시오.
project.ext { defaultBuildToolsVersion="28.0.3" //String
defaultMinSdkVersion=19 //Integer - Minimum requirement is Android 4.4
defaultTargetSdkVersion=28 //Integer - We ALWAYS target the latest by default
defaultCompileSdkVersion=28 //Integer - We ALWAYS compile with the latest by default }
config.xml에 다음이 있는지 확인하십시오.
<preference name="android-minSdkVersion" value="19" />
이는 stackoverflow 답변에서도 처리됩니다 : https://stackoverflow.com/a/56656680/839691
일부 라이브러리는
com.android.support:support-v4:+
어떤 것을 찾아
gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath
그리고 최신 업데이트에서 특정 버전을 사용하지 않는 경우 해당 라이브러리를 모듈로 추가하십시오 (또한 해당 라이브러리에서 문제를 제기하십시오!;))
@avmatte에게 감사드립니다!
편집 : 라이브러리 버전을 강제하도록 gradle을 요청할 수도 있습니다.
ext {
supportVersion {latest_version_here}
} // In root project.gradle
configurations.all {
resolutionStrategy {
force "com.android.support:support-v4:$supportVersion"
}
}
어제 갑자기 같은 문제가 발생했습니다. 그것은 무작위로 시작되었지만 주위를 읽으면서 @ cpro90이 위에서 언급 한 업데이트와 관련된 것처럼 보입니다. 그러나 필요한 수동 변경을 수행 할 위치를 찾지 못했습니다.
결국 문제가 cordova-plugin-crosswalk-webview 플러그인으로 인해 발생한다는 것을 확인했습니다. GitHub에서 오늘 아침 플러그인 재현 에서 문제 를 발견 했으며 점심 시간까지 조회수가 520 회가 넘었습니다.
@UNUMObile build.gradle
은 이전 버전을 전역으로 강제 적용하기 위해 파일 에서 다음을 제안했습니다 .
configurations.all {
resolutionStrategy.force 'com.android.support:support-v4:24.0.0'
}
이것은 나를 위해 즉시 작동했으며 'com.android.support:support-4:<28.x에 의존하는 다른 플러그인으로 다른 사람들을 도울 수 있습니다. 새로운 버전 28이 문제인 것 같습니다.
누군가가 앞으로 나아가는 데 도움이되기를 바랍니다.
Kotlin 개발자를위한 몇 가지 팁 :
여기에서 이러한 답변을 따르면 support-v4
프로젝트에 라이브러리가 없지만 여전히이 오류가 표시 ktx
됩니다. 라이브러리를 살펴보십시오 .
나는 1.0.0-alpha1
ktx 라이브러리에 최신 버전을 사용하고 있으며이 오류가 나타납니다. 버전으로 다시 변경 한 후 0.3
모든 것이 이제 정상으로 돌아갑니다.
platform / android / build.gradle에 다음 행을 추가하십시오.
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
여전히 문제가있는 경우 다음 명령을 실행 해보십시오.
cordova plugin add cordova-android-support-gradle-release --fetch
당신에 build.gradle
파일 추가
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
그리고 project.properties
파일 cordova.system.library.3
에서 cordova.system.library.3=com.android.support:support-v13:27.+
.
Phonegap Build 사용자의 경우 @catu 가 주석에서 언급했듯이 다른 버전의 지원 라이브러리를 포함하여 발생하는 빌드 실패를 방지하기위한 이 플러그인 을 사용해 볼 수 있습니다 .
buildscript {} 블록 바로 뒤에 플랫폼 /android/app/build.gradle 파일에 다음 코드 줄을 넣어이 문제를 해결하면됩니다.
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
I had same problem after installing the cordova-plugin-file-opener2 plugin. It resoved after doing: Option 1: Install cordova-android-support-gradle-release plugin. cordova plugin add cordova-android-support-gradle-release --fetch
Another aproach with same solution is create a hook. It's persistent (after platform reinstall), you can commit it and it don't require re-adding platform.
%project%\scripts\android\android-support-version.js
#!/usr/bin/env node
var fs = require('fs');
function replace_strings_in_file(filename, replacementsObject) {
if (fs.existsSync(filename)) {
var data = fs.readFileSync(filename, 'utf8');
Object.keys(replacementsObject).forEach(function (to_replace) {
var replace_with = replacementsObject[to_replace];
data = data.replace(to_replace, replace_with);
});
console.log(data);
fs.writeFileSync(filename, data, 'utf8');
} else {
console.log('file not found');
}
}
module.exports = function (context) {
var rootdir = process.argv[2];
if (rootdir) {
replace_strings_in_file("platforms/android/project.properties", {'com.android.support:support-v4:+': 'com.android.support:support-v4:27.1.0'});
console.log('com.android.support version fix');
}
};
Init hook in config
%project%\config.xml
...
<platform name="android">
<hook src="scripts/android/android-support-version.js" type="before_build" />
...
Install fs dependency to your project:
npm i fs --save-dev
Run build:
cordova build android
SUPER SIMPLE AND CORRECT WAY OF SOLVING IT!
Just update the sdk and add the latest 2 version of android... and restart the computer! Done...
Now we have time to talk about cars and sports...
I had the same problem, and none of the given solutions worked for me. Installing the latest version of Android SDK Build-tools (27.0.3) resolved my problem.
This is due to compat plugin. Remove that plugin if you have older version (less than 1.2.0) and set cordova-android@6.3.0
cordova plugin rm cordova-plugin-compat --force
cordova plugin add cordova-plugin-compat@1.2.0
cordova platform rm android
ionic cordova platform add android@6.3.0
Working at my case. Thanks :)
updates to @Brad Pitcher's answer:
hooks/copy_build_extras.js
#!/usr/bin/env node
var fs = require('fs');
module.exports = function (context) {
var rootdir = context.opts.projectRoot;
var android_dir = `${rootdir}/platforms/android`;
var gradle_filename = 'build-extras.gradle';
var gradle_file = `${rootdir}/${gradle_filename}`;
if (fs.existsSync(android_dir) && fs.existsSync(gradle_file)) {
fs.createReadStream(gradle_file)
.pipe(fs.createWriteStream(`${android_dir}/${gradle_filename}`));
}
};
config.xml
<platform name="android">
<allow-intent href="market:*" />
<hook src="hooks/copy_build_extras.js" type="before_build" />
</platform>
build-extras.gradle
in the root dir
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
I was running into this issue with react native and it was caused by the following lines in my android/app/build.gradle
:
implementation ("com.google.android.gms:play-services-base:+") {
force = true;
}
implementation ("com.google.android.gms:play-services-maps:+") {
force = true;
}
etc...
Apparently this + resolved to a new 17.0.0 version which broke my build.
Changing the + to 16.0.0 (or 16.0.1 for play-services-base) solved my issue
This problem had been killing me for a week.
Ultimately I ended up on android@6.4.0
I altered android/project.properties
by changing
#cordova.system.library.3=com.google.android.gms:play-services-analytics:+
cordova.system.library.3=com.google.android.gms:play-services-analytics:15+
That change finally got me out of the ttcIndex error message pit of darkness.
Then I got this error
com.android.builder.dexing.DexArchiveBuilderException:
com.android.builder.dexing.DexArchiveBuilderException
The error was apparently due to a Java version issue. I then altered android/build.gradle
with the following change
compileOptions {
#sourceCompatibility JavaVersion.VERSION_1_6
#targetCompatibility JavaVersion.VERSION_1_6
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Also note I do have the cordova-android-support-gradle-release
plugin installed, but have no idea if I need it.
It's a duplicate entry in values.xml in a folder called support-compat-28.0.0-alpha1.aar
.
You'll find this file on Windows at \users\YOURUSERID\.gradle\caches\transforms-1\files-1.1
Once inside that folder you have to go some levels deeper to values.xml.
In that file, search for an element <declare-styleable name="FontFamilyFont>
.
In that element, remove the FOUR lines with android:
in it.
After I made that change I can build again without errors.
If you are using ionic and you get this error, solve it by doing the following:
-cordova platform rm android
-cordova platform add android
It can be a possible solution
'developer tip' 카테고리의 다른 글
서버 응답 헤더 IIS7 제거 (0) | 2020.08.14 |
---|---|
OpenCV에서 Mat :: type ()을 사용하여 Mat 객체의 유형을 찾는 방법 (0) | 2020.08.14 |
Windows Forms의 프롬프트 대화 상자 (0) | 2020.08.14 |
클래스에 개체 구성원이 없습니다. (0) | 2020.08.14 |
에뮬레이션과 시뮬레이션의 차이점은 무엇입니까? (0) | 2020.08.14 |