2013-12-10 1 views
3

Я пытаюсь заставить Scandit работать в Android Studio - у меня есть работа с eclipse, но когда я пытаюсь это сделать в студии Android, я получаю UnsatisfiedLinkError.Scandit не работает в Android Studio (работает только в Eclipse)

Версия, которую я использую, - это сообщество Android Android scandit SDK 3.5.2. С андроид-студией 0.3.7 и андроидом 4.4 kitkat.

Я пробовал его в андроид-студии (последняя версия), следуя тем же шагам, что и для моего теста eclipse, но мое приложение вылетает. LogCat показывает:

java.lang.UnsatisfiedLinkError: Couldn't load scanditsdk-android-3.5.2 from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.zipier.qr_scanner_scandit-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.zipier.qr_scanner_scandit-1, /vendor/lib, /system/lib]]]: findLibrary returned null 
     at java.lang.Runtime.loadLibrary(Runtime.java:358) 
     at java.lang.System.loadLibrary(System.java:526) 
     at com.mirasense.scanditsdk.ScanditSDKBarcodePicker.initializeRecognitionEngine(ScanditSDKBarcodePicker.java:1298) 
     at com.mirasense.scanditsdk.ScanditSDKBarcodePicker.<init>(ScanditSDKBarcodePicker.java:330) 
     at com.mirasense.scanditsdk.ScanditSDKAutoAdjustingBarcodePicker.<init>(ScanditSDKAutoAdjustingBarcodePicker.java:59) 
     at com.zipier.qr_scanner_scandit.MainActivity.initializeAndStartBarcodeScanning(MainActivity.java:41) 
     at com.zipier.qr_scanner_scandit.MainActivity.onCreate(MainActivity.java:21) 
     at android.app.Activity.performCreate(Activity.java:5231) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5017) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
     at dalvik.system.NativeStart.main(Native Method) 

Это мой исходный код:

public class MainActivity extends Activity implements ScanditSDKListener { 
    private ScanditSDK mBarcodePicker; 
    public static final String sScanditSdkAppKey = "pQqIxjG4EeOA8nxhinmFTJUHoJZP168Vn1rCM65paHw"; 

    static { 
     System.loadLibrary("libscanditsdk-android-3.5.2"); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     initializeAndStartBarcodeScanning(); 
    } 

    @Override 
    protected void onPause() { 
     mBarcodePicker.stopScanning(); 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     mBarcodePicker.startScanning(); 
     super.onResume(); 
    } 


    public void initializeAndStartBarcodeScanning() { 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     ScanditSDKAutoAdjustingBarcodePicker picker = new ScanditSDKAutoAdjustingBarcodePicker(this, sScanditSdkAppKey, ScanditSDKAutoAdjustingBarcodePicker.CAMERA_FACING_FRONT); 

     setContentView(picker); 
     mBarcodePicker = picker; 

     mBarcodePicker.getOverlayView().addListener(this); 
    } 

    public void didScanBarcode(String barcode, String symbology) { 
     String cleanedBarcode = ""; 
     for (int i = 0; i < barcode.length(); i++) { 
      if (barcode.charAt(i) > 30) { 
       cleanedBarcode += barcode.charAt(i); 
      } 
     } 

     if (symbology.equals("QR")) { 
      Toast.makeText(this, cleanedBarcode, Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    public void didCancel() { 
     mBarcodePicker.stopScanning(); 
     finish(); 
    } 

    @Override 
    public void onBackPressed() { 
     mBarcodePicker.stopScanning(); 
     finish(); 
    } 

    @Override 
    public void didManualSearch(String arg0) { 
     // TODO Auto-generated method stub 

    } 
} 
+1

Родные библиотеки еще не поддерживаются в Android Studio. См. Http://stackoverflow.com/questions/16667903/android-studio-gradle-and-ndk. –

+1

Неправда. Я получил это от ответа Итана. – MinceMan

ответ

5

Он сейчас работает. Мориц в команде «Скандит» оказал большую помощь. Он прислал мне эту ссылку: https://stackoverflow.com/a/17730219.

Вот исправление:

  1. положить .so внутри Lib/armeabi структуры папок (Lib не ЛИЭС)
  2. пронестись его
  3. добавить его в ЛИЭС папку проекта
  4. изменить файл build.gradle, чтобы скомпилировать его

В моих тестах Scandit работает намного лучше и быстрее, чем другие считыватели кода qr, такие как zxing.

+0

Ключ должен был застегнуть папку lib, поэтому у меня был lib.zip. – MinceMan

+0

Если вы выполняете предпродажу, вам может потребоваться изменить расширение на банку. – MinceMan

+0

Отличный !! Это сработало для меня! Благодаря!! – Dim13i