Ich habe Probleme, wenn ich versuche, eine Bibliothek zu erstellen, die eine andere in Android Studio enthält. Zuerst benutze ich Android Studio 2.0 und Unity 5.3.4f1. Ich möchte FFMpeg in Unity integrieren, also entschloss ich mich, eine eigene Bibliothek zu erstellen, die die FFMpeg-Bibliothek als Vermittler verwendet. Die FFMpeg-Bibliothek ist here.java.lang.NoClassDefFoundError Android Studio Unity
zu starten ich ein neues leeres Projekt in Android Studio erstellt und in der es schaffte ein neues Modul, das meine Bibliothek sein, Neu-> Module-> Android-Bibliothek und nannte es „ffmpegcodec“ verwenden. Danach öffnete ich build.gradle Datei in dem neuen Modul-Ordner und Paste:
compile 'com.writingminds:FFmpegAndroid:0.3.2'
innerhalb Abhängigkeiten Klammern, und klicken Sie auf Sync (Es sind keine Störungen aufwiesen).
Danach eine neue Java-Klasse innerhalb src/main/java/erstellen Paketname/ und es FFMpegCodec benannt. Innerhalb dieser Paste dieser Code:
public class FFMpegCodec {
private static FFmpeg ffmpeg;
private static Context context;
private static FFMpegCodec INSTANCE = null;
public FFMpegCodec(){
INSTANCE = this;
}
public static FFMpegCodec instance(){
if(INSTANCE == null){
INSTANCE = new FFMpegCodec();
}
return INSTANCE;
}
public void setContext(Context ctx){
this.context = ctx;
}
public void loadFFMpegBinary() {
try {
if (ffmpeg == null) {
ffmpeg = FFmpeg.getInstance(context);
}
ffmpeg.loadBinary(new LoadBinaryResponseHandler() {
@Override
public void onFailure() {
Log.e("FFMPEG", "ffmpeg : NOT correct Loaded");
}
@Override
public void onSuccess() {
Log.e("FFMPEG", "ffmpeg : correct Loaded");
}
});
} catch (FFmpegNotSupportedException e) {
} catch (Exception e) {
}
}
public void execFFmpegCommand(final String[] command) {
try {
ffmpeg.execute(command, new ExecuteBinaryResponseHandler() {
@Override
public void onFailure(String s) {
Log.e("FFMPEG", "FAILED with output : " + s);
}
@Override
public void onSuccess(String s) {
Log.e("FFMPEG", "SUCCESS with output : " + s);
}
@Override
public void onProgress(String s) {
Log.e("FFMPEG", "Started command : ffmpeg " + command);
Log.e("FFMPEG", "progress : " + s);
}
@Override
public void onStart() {
Log.e("FFMPEG", "Started command : ffmpeg " + command);
}
@Override
public void onFinish() {
Log.e("FFMPEG", "Finished command : ffmpeg " + command);
}
});
} catch (FFmpegCommandAlreadyRunningException e) {
// do nothing for now
}
}
Es im Grunde eine Instanz von FFmpeg und macht Anrufe von ffmpeg Befehle erzeugt.
Sobald ich meine lib getan haben, habe ich beschlossen, es in meinem Projekt zu testen, damit ich meine lib in meiner app graddle verwenden, umfassen:
compile project(':ffmpegcodec')
Danach habe ich fügen Sie einfach diesen Code zu meinem MainActivity:
public class MainActivity extends AppCompatActivity {
FFMpegCodec ffmpeg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button execCommandButton = (Button) findViewById(R.id.execCommandButton);
ffmpeg = FFMpegCodec.instance();
execCommandButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "This is a Toast!!", Toast.LENGTH_SHORT).show();
ffmpeg.setContext(MainActivity.this);
ffmpeg.loadFFMpegBinary();
String []cmd = new String[1];
cmd[0] = "-version";
ffmpeg.execFFmpegCommand(cmd);
}
});
}
Danach laufe ich mein Projekt und wenn ich den Knopf drücke, gibt es zurück, dass alles in Ordnung ist, zeigt ffmpeg Version. Sobald ich überprüfen, dass meine lib arbeitet, entscheide ich, es zu Unity zu verschieben, kopieren Sie die ffmpegcodec-realese.arr Datei innerhalb ffmpegcodec/build/outputs/aar Ordner und fügen Sie es in mein Unity-Projekt. Dann schrieb ich ein C# -Skript, um meine lib zu verwenden, die dieses enthält:
Die Probleme kommen hier. Wenn ich eine Klasseninstanz mit:
AndroidJavaClass captureClass = new AndroidJavaClass ("com.promineostudios.ffmpegcodec.FFMpegCodec");
Es eine Instanz erstellt richtig, und auch wenn ich erstelle ein Objekt mit:
captureObject = captureClass.CallStatic<AndroidJavaObject>("instance");
Aber wenn ich versuche, den Zugang zu FFMpeg Bibliothek Methoden zu erhalten, wie in „setContext“ es schlägt fehl und gibt dies:
UnityEngine.AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/github/hiteshsondhi88/libffmpeg/FFmpeg;
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/github/hiteshsondhi88/libffmpeg/FFmpeg;
at com.promineostudios.ffmpegcodec.FFMpegCodec.loadFFMpegBinary(FFMpegAndroidCodec.java:39)
at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
at com.unity3d.player.UnityPlayer.a(Unknown Source)
at com.unity3d.player.UnityPlayer$b.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.github.hiteshsondhi88.libffmpeg.FFmpeg" on path: DexPathList[[zip file "/data/app/com.promineostudios.ffmpegmodule-1/base.apk"],nativeLibraryDirectories=[/data/app/com.promineostudios.ffmpegmodule-1/lib/arm, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at com.promineostudios.ffmpegcodec.FFMpegCodec.loadFFMpegBinary(FFMpegAndroidCodec.java:39)
at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
at com.unity3d.player.UnityPlayer.a(Unknown Source)
at com.unity3d.player.UnityPlayer$b.run(Unknown Source)
ich denke, dass das Problem in ist, wenn ich meine lib in Unity exportieren, aber ich weiß nicht, was falsch läuft. Wenn mir jemand helfen könnte, werde ich sehr geschätzt.
Dank und Entschuldigung für mein Englisch.
ich lief in ein ähnliches Problem in der Lage zu laufen und zu fragen, war, wie Sie dieses Problem gelöst. – uchamp
Hallo @uchamp, ich konnte nicht herausfinden, wie man es löst. Wenn Sie einen Weg finden, es funktioniert zu lassen, werde ich sehr geschätzt, wenn Sie es teilen. Es tut mir leid, dass ich dir nicht helfen konnte. – Nestoraj
Haben Sie versucht, die .jar-Datei, die die Klassen "com.github.hiteshsondhi88.libffmpeg" enthält, auch in den Ordner "unity plugins" zu kopieren? – RandomCouch