OK, vielleicht ist es sehr einfach, aber ich kann es gerade jetzt nicht herausfinden.
Ich habe das Google Beispielprojekt Kartenleser in Android Studio 1.5.1 importiert, kompiliert es bei compileSdkVerison 23, Es funktioniert auf meinem Handy.
Dann ging ich durch das SDK und kam zum Quellcode zu android.nfc.tech.BasicTagTechnology
. Ich fand TransceiveResult
in% android.nfc.tech.BasicTagTechnology#transceive
konnte nicht aufgelöst werden. Dann fand ich die Klasse TransceiveResult
fehlt in meinem D:\Android\sdk\platforms\android-23\android.jar
, aber präsentiert in Android-Quellcode hier D:\Android\sdk\sources\android-23\android\nfc\TransceiveResult.java
dann erkannte ich, dass es von der Öffentlichkeit versteckt werden konnte, nicht exportiert, eigentlich ist es
Dann habe ich einige zufällige Dinge getan, nachdem ich das Projekt synchronisieren, säubern und neu erstellen, Caches ungültig machen / neu gestartet, noch nicht TransceiveResult
auflösen kann, frage ich mich, da das Symbol im SDK verloren gegangen ist Wie kann das Projekt reibungslos kompiliert werden?
BEARBEITEN für endlich Aha
Wir nennen android.nfc.tech.BasicTagTechnology#transceive
in unserem Code anstatt TransceiveResult
, in der Kompilierzeit müssen wir TransceiveResult
nicht auflösen, wir müssen nur android.nfc.tech.BasicTagTechnology#transceive
auflösen, auf das in unserem Code verwiesen wird, bei dem ich verloren habe dieser Moment.
@hide bedeutet, dass hier nicht in den Dokumenten enthalten ist und es wird auch aus den Klassen innerhalb Ihrer android.jar entfernt, die bei der Kompilierung verwendet wird. Diese sind jedoch in Runtime verfügbar.
Aktualisierung: Um in Ihrer IDE zu verdeutlichen, wenn Sie in Ihre SDK-Klassen eintauchen, sehen Sie möglicherweise Verweise auf versteckte Elemente, die Sie nicht auflösen können. Das ist OK und es wird weiterhin kompilieren, solange sich diese in den SDK-Klassen nicht in Ihrem Code befinden.
Wenn Sie diese versteckten Klassen / Methoden / Felder verwenden möchten, haben Sie zwei Hauptoptionen:
1) eine Vollversion von android-framework.jar holen und kompilieren können. Dies hat jedoch den Nachteil, dass der kompilierte Code wahrscheinlich nicht in anderen Android-Versionen ausgeführt wird, da die Klasse oder die Methode möglicherweise gar nicht da ist. und auch BasicTagTechnology zum Beispiel ist eigentlich Paket privat, so dass Sie sowieso nicht darauf zugreifen können
2) verwende Reflexion:
%Vor%Dies ist eine bessere Option in dem Sinne, dass es flexibler ist und Sie überprüfen können, ob die Klasse / Methode existiert, um sie zu initialisieren / aufzurufen, Ausnahme zu fangen etc.
Tags und Links android android-studio android-build android-sdk-tools android-studio-import