Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Android külső könyvtári ökoszisztémája hatalmas. Emiatt gyakran van értelme meglévő Android-kódtárat használni, mint újat létrehozni.
Az Androidhoz készült .NET lehetővé teszi ezt egy kötéstárral , amely automatikusan C# burkolókkal burkolja a kódtárat, így C# hívásokon keresztül meghívhatja a Java-kódot.
Ezt felügyelt hívható burkolókkal (MCW) valósítjuk meg. Az MCW egy JNI-híd, amelyet akkor használnak, amikor a felügyelt kódnak Meg kell hívnia a Java-kódot. A felügyelt hívható burkolók támogatják a Java-típusok alosztályozását és a Java-típusok virtuális módszereinek felülírását is. Hasonlóképpen, amikor az Android futtatókörnyezeti (ART) kód felügyelt kódot szeretne meghívni, ezt egy másik JNI-hídon, az Android Callable Burkolóin (ACW) keresztül teszi. Ez az architektúra az alábbi ábrán látható:
A Bindings Library egy gyűjtemény, amely Java-típusokhoz tartozó Managed Callable Wrappers-t tartalmaz. Például itt van egy Java-típus, MyClass, amelyet egy Bindings könyvtárba szeretnénk csomagolni.
package com.contoso.mycode;
public class MyClass
{
public String myMethod (int i) { ... }
}
Miután létrehoztunk egy Binding Library-t a .jar fájlhoz, amely tartalmazza a MyClass, példányosíthatjuk, és C#-ból meghívhatunk rajta metódusokat.
var instance = new MyClass ();
string result = instance.MyMethod (42);
A Bindings Library létrehozásához a .NET for Android Android Java Binding Library sablont kell használnia. Az eredményül kapott binding projekt létrehoz egy .NET assembly-t az MCW osztályokkal, .jar/.aar fájl(ok)kal és az Android Library projektekbe beágyazott erőforrásokkal. Az eredményül kapott Kötéstár-szerelvényre való hivatkozással újra felhasználhat egy meglévő Java-kódtárat az Android-alapú .NET-projektben.
Amikor a kötéstárban típusokra hivatkozik, a kötéstár névterét kell használnia. Általában a C#-forrásfájlok tetején egy direktívát ad hozzá using , amely a Java-csomag nevének .NET-névtérverziója. Ha például a kötött .jar Java-csomag neve a következő:
com.contoso.package
Ezután a következő using utasítást kell elhelyeznie a C#-forrásfájlok tetején a kötött .jar fájl típusainak eléréséhez:
using Com.Contoso.Package;
Meglévő Android-kódtár kötésekor a következő szempontokat kell szem előtt tartani:
Vannak külső függőségek a könyvtárhoz? – Az Android-kódtár által igényelt Java-függőségeket NuGet-csomagon vagy AndroidLibraryként kell szerepeltetni a .NET for Android-projektben. A natív szerelvényeket AndroidNativeLibraryként kell hozzáadni a kötési projekthez.
Az Android API melyik verzióját célozza meg az Android-kódtár? – Az Android API-szintjét nem lehet "leminősíteni"; győződjön meg arról, hogy az Androidhoz készült .NET kötési projekt ugyanazt (vagy magasabb) API-szintet célozza meg, mint az Android könyvtár.
Java API-k adaptálása C⧣-hez
Az Androidhoz készült .NET kötésgenerátor módosít néhány Java-kifejezést és mintát, hogy azok megfeleljenek a .NET-mintáknak. Az alábbi lista a Java C#/.NET-re való leképezését ismerteti:
A Java-ban a Setter/Getter metódusoka .NET-ben lévő tulajdonságok .
A mezők a Javábantulajdonságok a .NET-ben.
A Java figyelői/figyelői felületei a .NET eseményei . A visszahívási felületek metódusainak paramétereit egy
EventArgsalosztály jelöli.A Java statikus beágyazott osztálya egy beágyazott osztály a .NET-ben.
A Java egyik belső osztálya egy beágyazott osztály , amelyben egy példánykonstruktor található C#-ban.
Natív könyvtár felvétele az összekapcsolásba
Előfordulhat, hogy a Java-kódtárak kötésének részeként . so kódtárat is be kell vonni egy .NET for Android-kötési projektbe. A becsomagolt Java-kód végrehajtásakor az Androidhoz készült .NET-nek nem sikerül végrehajtani a JNI-hívást, és a következő hibaüzenet jelenik meg a logcat kimenetében: java.lang.UnsatisfiedLinkError: Native metódus nem található:.
Ennek javítása az, hogy manuálisan betölti a .so könyvtárat egy hívással Java.Lang.JavaSystem.LoadLibrary. Ha például feltételezzük, hogy egy .NET for Android-projekt megosztott könyvtára, a libpocketsphinx_jni.so, szerepel a kötési projektben az AndroidNativeLibrary építési műveletként, a következő kódrészlet (a megosztott könyvtár használata előtt végrehajtva) betölti a .so könyvtárat:
Java.Lang.JavaSystem.LoadLibrary("pocketsphinx_jni");
Kötési forgatókönyvek
A következő kötési forgatókönyv-útmutatók segítséget nyújtanak egy Java-kódtár (vagy -kódtár) kötésében az alkalmazásba való beépítéshez:
A Java-kódtár kötése útmutató a helyileg elérhető .jar.aar/ fájlok kötéstárainak létrehozásához.
A Maven-adattárban tárolt .jar/.aar fájlokhoz készült Java kötéstárak létrehozásának útmutatója.
A kötések testreszabásával manuális módosításokat végezhet a kötésen a buildelési hibák megoldása érdekében, és hogyan alakíthatja az eredményként kapott API-t úgy, hogy az "C#-szerűbb" legyen.
A kötések hibaelhárítása felsorolja a gyakori kötési hibaforgatókönyveket, ismerteti a lehetséges okokat, és javaslatokat tesz a hibák megoldására.