Scandit不适用于Android Studio(仅适用于Eclipse)



我正试图让Scandit在安卓工作室中工作-我让它与eclipse一起工作,但当我在安卓Studio中尝试时,我得到了UnsatisfiedLinkError

我使用的版本是scandit SDK社区android 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
    }
}

现在可以工作了。Moritz在Scandit团队的帮助很大。他给我发了这个链接:https://stackoverflow.com/a/17730219.

修复方法如下:

  1. 将.so放入lib/armeabi文件夹结构中(lib而非libs)
  2. 拉上拉链
  3. 将其添加到项目的libs文件夹中
  4. 更改build.gradle文件进行编译

在我的测试中,Scandit比zxing等其他qr码阅读器工作得更好、更快。

最新更新