React Native Android Отсутствующие классы обнаружены при запуске ошибки R8 в JenkinsAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 React Native Android Отсутствующие классы обнаружены при запуске ошибки R8 в Jenkins

Сообщение Anonymous »

Я пытаюсь обновить RN с 0.72 до 0.73.9
Я получаю следующую ошибку в Jenkins (я не могу воспроизвести проблему на локальном компьютере).
> Task :app:lintVitalAnalyzeDevRelease

timber.lint.TimberIssueRegistry in /root/.gradle/caches/transforms-3/26daadcd46ecfc898dac002daac9b73b/transformed/jetified-timber-4.7.1/jars/lint.jar does not specify a vendor; see IssueRegistry#vendor

> Task :app:lintVitalReportDevRelease

> Task :app:lintVitalDevRelease

> Task :app:minifyDevReleaseWithR8 FAILED

ERROR: Missing classes detected while running R8. Please add the missing classes or apply additional keep rules that are generated in /home/jenkins/workspace/APP_PR-1867/android/app/build/outputs/mapping/devRelease/missing_rules.txt.

ERROR: R8: Missing class edu.umd.cs.findbugs.annotations.SuppressFBWarnings (referenced from: void com.jwplayer.c.a.f.onMetadata(androidx.media3.common.Metadata))

Missing class kotlinx.parcelize.Parcelize (referenced from: io.didomi.sdk.Purpose and 10 other contexts)

ASM Instrumentation process wasn't able to resolve some classes, this means that

the instrumented classes might contain corrupt stack frames. Make sure the

dependencies that contain these classes are on the runtime or the provided

classpath. Otherwise, the jvm might fail to load the corrupt classes at runtime

when running in a jvm environment like unit tests.

Classes that weren't resolved:

> com.jwplayer.pub.api.configuration.PlayerConfig

> com.google.android.gms.cast.framework.CastSession

> com.jwplayer.pub.api.JWPlayer$PlayerInitializationListener

> com.jwplayer.api.b.a.l

> com.jwplayer.api.b.a.a

> com.jwplayer.c.m

> com.jwplayer.api.b.a.k

> com.jwplayer.a.a

> com.jwplayer.a.h

> com.jwplayer.c.e

-- 74 more classes --

FAILURE: Build failed with an exception.

* What went wrong:

Execution failed for task ':app:minifyDevReleaseWithR8'.

> A failure occurred while executing com.android.build.gradle.internal.tasks.R8Task$R8Runnable

> Compilation failed to complete

Я попробовал отредактировать файл proguard-rules.pro и добавить:
-keepattributes *Annotation*
-keep @interface edu.umd.cs.findbugs.annotations.**
-keep class kotlinx.parcelize.** { *; }
-keep @kotlinx.parcelize.Parcelize class * {
;
;
}
-keep class com.jwplayer.pub.api.** { *; }
-keep class com.google.android.gms.cast.framework.** { *; }
-keep class com.jwplayer.** { *; }

но, похоже, это никак не влияет на вышеуказанные ошибки.
Я использую https://github.com/jwplayer/ jwplayer-react-native
содержимое app/build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'org.jetbrains.kotlin.android'
apply plugin: 'com.google.firebase.firebase-perf'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

project.ext.envConfigFiles = [
dev: ".env.dev",
staging: ".env.staging",
prod: ".env.prod",
]

apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
apply plugin: 'kotlin-android'

apply plugin: "com.facebook.react"

react {
entryFile = file("../../index.js")
}

def enableSeparateBuildPerCPUArchitecture = false

def enableProguardInReleaseBuilds = true

def jscFlavor = 'org.webkit:android-jsc:+'

class BuildConfig {
static final int versionMajor = 10
static final int versionMinor = 6
static final int versionFix = 2
static final int playstoreVersionSuffix = 0
}

ext {
buildConfig = new BuildConfig()
RNJWPlayerUseGoogleCast = true
exoplayerVersion = '2.18.1'
JWPlayerVersion = '4.18.2'
}

android {
ndkVersion rootProject.ext.ndkVersion

buildToolsVersion rootProject.ext.buildToolsVersion
compileSdkVersion rootProject.ext.compileSdkVersion

namespace ""

defaultConfig {
applicationId ""
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
// versionCode BuildConfig.versionMajor * 1000000 + 3 * 10000 + BuildConfig.versionFix * 100 + BuildConfig.playstoreVersionSuffix
versionCode BuildConfig.versionMajor * 1000000 + BuildConfig.versionMinor * 10000 + BuildConfig.versionFix * 100 + BuildConfig.playstoreVersionSuffix
versionName "${BuildConfig.versionMajor}.${BuildConfig.versionMinor}.${BuildConfig.versionFix}"
multiDexEnabled true

// react-native-iap: we only use the Google Play flavor, this needs an update if we use amazon too!!
// https://stackoverflow.com/questions/679 ... -task-appm
missingDimensionStrategy 'store', 'play'

// https://github.com/FormidableLabs/react ... roid-setup
manifestPlaceholders = [
appAuthRedirectScheme: ""
]

// https://github.com/luggit/react-native- ... roid-setup
resValue "string", "build_config_package", ""

// https://docs.wonderpush.com/docs/androi ... nfig-class
resValue "string", "wonderpush_buildConfigPackage", ""
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_18
targetCompatibility JavaVersion.VERSION_18
}

kotlin {
jvmToolchain(17)
}

signingConfigs {
debug {
storeFile file('../keystore/debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}

release {
storeFile file(System.getenv("APP_KEYSTORE") ?: '../keystore/debug.keystore')
storePassword System.getenv("APP") ?: 'android'
keyAlias System.getenv("APP") ?: 'androiddebugkey'
keyPassword System.getenv("APP") ?: 'android'
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {

signingConfig isIdeBuild() ? signingConfigs.debug : signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
shrinkResources enableProguardInReleaseBuilds
debuggable isIdeBuild()
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}

flavorDimensions "server"

productFlavors {
dev {
dimension "server"
applicationIdSuffix ".dev"
versionNameSuffix hyphen(buildVersionNameSuffix('dev'))
buildConfigField "String", "APP_INFO", quoted(buildVersionNameSuffix("dev"))
}
staging {
dimension "server"
applicationIdSuffix ".staging"
versionNameSuffix hyphen(buildVersionNameSuffix('staging'))
buildConfigField "String", "APP_INFO", quoted(buildVersionNameSuffix("staging"))
}
prod {
dimension "server"
String branchName = System.getenv('BRANCH_NAME') ?: ""

if (isIdeBuild()) {
versionNameSuffix hyphen(buildVersionNameSuffix("prod"))
buildConfigField "String", "APP_INFO", quoted(buildVersionNameSuffix("prod"))
} else {
if (!branchName.startsWith("release/")) {
versionNameSuffix hyphen(buildVersionNameSuffix("prod"))
buildConfigField "String", "APP_INFO", quoted(buildVersionNameSuffix("prod"))
} else {
buildConfigField "String", "APP_INFO", quoted("")
}
}
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
def apkName = "app-${variant.name}-${android.defaultConfig.versionName}-${variant.buildType.name}"

variant.outputs.each { output ->
// Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
// For each separate APK per architecture, set a unique version code as described here:
// https://developer.android.com/studio/bu ... plits.html
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(com.android.build.OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
defaultConfig.versionCode * 1000 + versionCodes.get(abi)
}
}

variant.outputs.all { output ->
outputFileName = "${apkName}.apk"
}
}

lintOptions {
baseline file("lint-baseline.xml")
checkAllWarnings true
warningsAsErrors true
}
}

def gitSha() {
if (isIdeBuild()) {
return "devbuild"
} else {
if (System.getenv("GIT_COMMIT") != null) {
return System.getenv("GIT_COMMIT").substring(0, 7)
} else {
return "devbuild"
}
}
}

def buildVersionNameSuffix(String environment) {
def upperCaseEnv = environment.toUpperCase()
if (upperCaseEnv == "PROD") {
return ""
}
return "${System.getenv('BUILD_NUMBER')}-${environment}-${gitSha()}"
}

private static quoted(string) {
return "\"$string\""
}

private static hyphen(String string) {
if (!string.isEmpty()) {
return "-$string"
} else {
return ""
}
}

dependencies {
implementation project(':react-native-config')
//noinspection GradleDynamicVersion
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.1.0'

implementation "com.google.android.gms:play-services-base:17.2.1"

// The version of react-native is set by the React Native Gradle Plugin
implementation("com.facebook.react:react-android")

if (hermesEnabled.toBoolean()) {
implementation("com.facebook.react:hermes-android")
} else {
implementation jscFlavor
}

implementation "androidx.core:core-ktx:1.2.0"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
implementation 'com.dailymotion.dailymotion-sdk-android:sdk:0.2.10'

implementation 'com.jakewharton.timber:timber:4.7.1'

implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1'

testImplementation 'junit:junit:4.13'

implementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion"

implementation "androidx.appcompat:appcompat:1.2.0"

implementation 'com.squareup.okhttp3:okhttp:4.9.3'
implementation "com.google.android.gms:play-services-cast-framework:${safeExtGet('castFrameworkVersion', '+')}"
implementation 'io.didomi.sdk:android:1.86.3'
implementation "androidx.work:work-runtime:2.7.1"

// JWPlayer SDK
implementation "com.jwplayer:jwplayer-core:$JWPlayerVersion"
implementation "com.jwplayer:jwplayer-common:$JWPlayerVersion"
implementation "com.jwplayer:jwplayer-chromecast:$JWPlayerVersion"
implementation "com.jwplayer:jwplayer-ima:$JWPlayerVersion"
}

def safeExtGet(prop, fallback) {
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
}

apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)


содержимое build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
ext {
minSdkVersion = 28
compileSdkVersion = 34
targetSdkVersion = 34
buildToolsVersion = "34.0.0"
androidXCore = "1.0.2"
androidXAnnotation = "1.2.0"
androidXBrowser = "1.3.0"
castFrameworkVersion = "21.3.0"

ndkVersion = "25.1.8937393"
kotlinVersion='1.9.10'
}

repositories {
google()
mavenCentral()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath("com.android.tools.build:gradle")
classpath("com.facebook.react:react-native-gradle-plugin")
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
classpath 'com.google.gms:google-services:4.4.0'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
classpath 'com.google.firebase:perf-plugin:1.4.1'
}
}

plugins {
id "com.github.ben-manes.versions" version "0.38.0"
}

allprojects {
tasks.withType(Javadoc).all { enabled = false }

repositories {
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}

mavenCentral()
mavenLocal()

google()
maven { url "https://jitpack.io" }
maven {
// JW Player
url 'https://mvn.jwplayer.com/content/repositories/releases/'
}
}
}

apply plugin: "com.facebook.react.rootproject"

dependencyUpdates.resolutionStrategy = {
componentSelection { rules ->
rules.all { ComponentSelection selection ->
boolean rejected = ['alpha', 'beta'].any { qualifier ->
selection.candidate.version ==~ /(?i).*[.-]${qualifier}[.\d-]*/
}
if (rejected) {
selection.reject('Release candidate')
}
}
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

def isIdeBuild() {
return properties.containsKey("android.injected.invoked.from.ide")
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... in-jenkins
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»