Une référence non résolue peut se produire au moment de la construction lors du référencement des classes Java à partir de Kotlin

Une histoire qu'il vaut mieux ne pas utiliser de lien symbolique sous app / src

Hypothèse: Symblic Link a été utilisé pour la référence de code entre les saveurs

Lorsque vous développez une application dans Android Studio et que vous devez séparer une bibliothèque SDK tierce pour la production et le bac à sable J'ai utilisé Flovor pour diviser la construction, et sandbox utilise également le même code de produit, j'ai donc utilisé des liens symboliques pour faire référence au code.

app/build.gradle


android {

 (réduction)

 Flavors {
    product {}
    sandbox {}
  }

 (réduction)

}

app/src


% ln -s product sandbox
% ls
  product
  sandbox -> product

Si vous faites comme ça, cela fonctionnera normalement sur Android Studio et l'arborescence du projet sera également affichée correctement avec le nom de la saveur.

Cependant, lorsque je référence la classe Java qui est la destination de Symbolic Link dans Kotlin, une erreur se produit au moment de la construction.

Alors, après un certain temps, C'était un projet écrit en Java, mais lors de l'ajout de fonctions, j'ai décidé d'écrire une nouvelle partie en Kotlin.

Par conséquent, il est également nécessaire de se référer aux classes Java de Kotlin, Si la saveur est spécifiée comme sandbox, la classe Java de la destination Symbolic Link peut être référencée. Il aurait dû être référencé et complété normalement sur Android Studio ...

error


Unresolved reference: packagehoge
Unresolved reference: classmoge

J'obtiens une erreur comme celle-ci lors de la construction.

Il n'y a aucun problème si la structure du code est uniquement Java ou Kotlin uniquement. Cela semble se produire lorsque vous essayez de référencer une classe Java à partir de Kotlin.

Solution: utilisez correctement les sourcesSets

Réglez-le correctement sans porter de côté

app/build.gradle


android {

 (réduction)

 Flavors {
    product {}
    sandbox {}
  }

 (réduction)

  sourceSets {
    sandbox {
      sandbox.manifest.srcFile 'src/product/AndroidManifest.xml'
      sandbox.assets.srcDirs += 'src/product/assets'
      sandbox.java.srcDirs += 'src/product/java'
      sandbox.res.srcDirs += 'src/product/res'
    }
  }

 (réduction)

}

En définissant les paramètres ci-dessus, la référence utilisant le lien symbolique a disparu et la construction peut passer en toute sécurité.

Recommended Posts

Une référence non résolue peut se produire au moment de la construction lors du référencement des classes Java à partir de Kotlin
Comportement lors de l'appel des méthodes d'argument de longueur variable Java à partir de Scala / Kotlin / Java
Jetez un œil à Kotlin dans une perspective Java efficace