developer tip

"cordova build android"실행-android : fontVariationSettings 및 android : ttcIndex 속성을 찾을 수 없습니다.

optionbox 2020. 8. 14. 07:38
반응형

"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 androidionic 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" />

에서 : https://forum.ionicframework.com/t/firebase-app-unable-to-compile-on-android-with-aapt-error/166564/7

이는 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-alpha1ktx 라이브러리에 최신 버전을 사용하고 있으며이 오류가 나타납니다. 버전으로 다시 변경 한 후 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.


Solution link

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

참고URL : https://stackoverflow.com/questions/49162538/running-cordova-build-android-unable-to-find-attribute-androidfontvariation

반응형