2017-02-17 4 views
1

Я разрабатываю приложение для Android, которое включает небольшую 3D-игру внутри. Здесь я использую платформу Libgdx (используется gdx-setup.jar) для разработки моей 3D-модели. Поскольку он использует собственные функции для Android, мне нужно использовать libgdx в качестве библиотеки внутри приложения Android. я следовать инструкциям libgdx/викиБиблиотека Libgdx интегрирована в собственный проект андроида

Я скачал libgdx-nightly-latest.zip от: http://libgdx.badlogicgames.com/nightlies/

и место gdx.jar, GDX-бэкенд-android.jar, GDX-natives.jar , armeabi и armeabi-v7a папки в папке libs. Затем я добавил их в виде библиотек.

Мои Gradle зависимостей:

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:23.4.0' 
compile files('libs/gdx-backend-android.jar') 
compile files('libs/gdx.jar') 
compile files('libs/x86.jar') 
compile files('libs/gdx-natives.jar') 
} 

MainActivity класс

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
btnPlay = (Button) findViewById(R.id.button); 

btnPlay.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(v.getContext(), GameActivity.class); 
     startActivity(intent); 
    } 
}); 
} 

GameActivity класс

public class GameActivity extends AndroidApplication { 

GdxGame gdxGame; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    gdxGame = new GdxGame(); 
    AndroidApplicationConfiguration config = new  AndroidApplicationConfiguration(); 
    initializeForView(gdxGame, config); 
} 
} 

GdxGame мой класс ApplicationListener. Когда я запускаю этот код в приложение вылетает с этой ошибкой:

java.lang.ExceptionInInitializerError 
at java.lang.reflect.Constructor.newInstance(Native Method) 
at java.lang.Class.newInstance(Class.java:1606) 
at android.app.Instrumentation.newActivity(Instrumentation.java:1066) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load shared library 'gdx' for target: Linux, 32-bit 
at com.badlogic.gdx.utils.SharedLibraryLoader.load(SharedLibraryLoader.java:124) 
at com.badlogic.gdx.utils.GdxNativesLoader.load(GdxNativesLoader.java:33) 
at com.badlogic.gdx.backends.android.AndroidApplication.<clinit>(AndroidApplication.java:63) 
at java.lang.reflect.Constructor.newInstance(Native Method) 
at java.lang.Class.newInstance(Class.java:1606) 
at android.app.Instrumentation.newActivity(Instrumentation.java:1066) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
Can

кто-нибудь помочь с этим вопросом? Я что-то упускаю? Спасибо.

project library structure and gradle

ответ

1

Вы хотите добавить только .jar файл в зависимости. Есть некоторые файлы .so для разных процессорных архитектур, таких как arm64-v8a, armeabi, armeabi-v7a, x86, x86_64. Вам нужно добавить их. Сохраните файл .so в папке libs.

добавить jniLibs.srcDirs = ['libs'] в soureSets

Требовалась библиотека для андроид

armeabi/libgdx.so 
armeabi-v7a/libgdx.so 
x86/libgdx.so 
gdx-backend-android.jar 
gdx-backend-android-sources.jar 

компилировать как это:

compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion" 
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi" 
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" 
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a" 
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" 
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64" 
+0

Большое спасибо за ваш ответ. Я добавил эти зависимости сейчас и обновил sourceSet sourceSets { main { jniLibs.srcDirs = ['libs'] } } } но все же такая же ошибка возникает. – chami

+0

Вы только компилируете файлы .jar, в папке libs вам нужно сохранить файл libgdx.so для разных архитектур. И сообщите, что это ваша библиотека jni. – Aryan

+0

спасибо Abhishek за вашу помощь. Я добавлю скриншот к файлу градиента моего проекта и библиотеке к вышеупомянутому вопросу. вы можете проверить его. Я все еще в той же ситуации. ошибка приложения с той же ошибкой. – chami

Смежные вопросы