Beim Verweisen auf Java-Klassen aus Kotlin kann es beim Erstellen zu einer ungelösten Referenz kommen

Eine Geschichte, bei der es besser ist, keinen symbolischen Link unter app / src zu verwenden

Annahme: Symblic Link wurde als Code-Referenz zwischen Flavours verwendet

Wenn Sie eine App in Android Studio entwickeln und eine SDK-Bibliothek eines Drittanbieters für Produktion und Sandbox trennen müssen Ich habe Flovor verwendet, um den Build zu teilen, und Sandbox verwendet auch denselben Produktcode, sodass ich symbolische Links verwendet habe, um auf den Code zu verweisen.

app/build.gradle


android {

 (Kürzung)

 Flavors {
    product {}
    sandbox {}
  }

 (Kürzung)

}

app/src


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

Wenn Sie dies mögen, funktioniert es normal unter Android Studio, und der Projektbaum wird auch ordnungsgemäß mit dem Geschmacksnamen angezeigt.

Wenn ich mich jedoch auf die Java-Klasse beziehe, die das Ziel von Symbolic Link in Kotlin ist, tritt beim Erstellen ein Fehler auf.

Also, nach einer Weile, Es war ein in Java geschriebenes Projekt, aber beim Hinzufügen von Funktionen habe ich beschlossen, einen neuen Teil in Kotlin zu schreiben.

Daher ist es auch notwendig, auf Java-Klassen von Kotlin zu verweisen, Wenn die Variante als Sandbox angegeben ist, kann auf die Java-Klasse des Symbolic Link-Ziels verwiesen werden. Es sollte normalerweise in Android Studio referenziert und ergänzt worden sein ...

error


Unresolved reference: packagehoge
Unresolved reference: classmoge

Ich bekomme einen solchen Fehler beim Bauen.

Es gibt kein Problem, wenn die Codestruktur nur Java oder nur Kotlin ist. Es scheint aufzutreten, wenn versucht wird, eine Java-Klasse aus Kotlin zu referenzieren.

Lösung: Verwenden Sie sourceSets ordnungsgemäß

Lassen Sie es uns richtig einstellen, ohne es seitlich zu tragen

app/build.gradle


android {

 (Kürzung)

 Flavors {
    product {}
    sandbox {}
  }

 (Kürzung)

  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'
    }
  }

 (Kürzung)

}

Durch Vornehmen der obigen Einstellungen ist die Referenz mit Symbolic Link verschwunden und der Build kann sicher übergeben werden.

Recommended Posts

Beim Verweisen auf Java-Klassen aus Kotlin kann es beim Erstellen zu einer ungelösten Referenz kommen
Verhalten beim Aufrufen von Java-Argumentmethoden mit variabler Länge aus Scala / Kotlin / Java
Schauen Sie sich Kotlin aus einer effektiven Java-Perspektive an