एंड्रॉइड स्टूडियो में ZXing को एकीकृत करें


93

मैंने अपने द्वारा किए गए सभी चरणों को स्पष्ट करना शुरू कर दिया है और अंत में समस्या क्या है।

  1. डाउनलोड ZXing-2.2 https://code.google.com/p/zxing/downloads/list
  2. सभी zxing-2.2 में बढ़ाएँ।
  3. Apache Ant http://www.youtube.com/watch?v=XJmndRfb1TU डाउनलोड और इंस्टॉल करें
  4. विंडोज कमांडलाइन (रन-> सीएमडी) के उपयोग के साथ निकाली गई निर्देशिका में नेविगेट करें
  5. कमांडलाइन विंडो में - 'ant -f core / build.xml' प्रेस टाइप करें और Apache काम करें यह जादू है

इस समय मेरे Android एप्लिकेशन में सीधे ZXing लाइब्रेरी को एकीकृत करने जैसा है

लेकिन Wooops, "Buildfile: core \ build.xml मौजूद नहीं है! निर्माण विफल रहा है। ठीक है। 6. आयात ZXing - लापता कोर / build.xml

अब हाँ, मैं अपने core.jar है।

  1. Android Studio खोलें, फ़ाइल -> आयात परियोजना -> चुनें / android / in /z-2-2// -> मौजूदा स्रोतों से परियोजना बनाएँ -> परियोजना का नाम: andoid -> स्रोत फ़ाइलों के लिए ... सभी की जाँच की अगला -> पुस्तकालय (कैंट) कुछ नहीं) अगला -> मॉड्यूल (एंड्रॉइड चेक किया गया) अगला -> एसडीके 1.7 अगला -> समाप्त करें

प्रोजेक्ट ओपन के साथ -> बिल्ड -> पुनर्निर्माण परियोजना

100 त्रुटियों 19 चेतावनियाँ

फ़ाइल -> प्रोजेक्ट संरचना -> लाइब्रेरीज़ -> ऐड -> जावा -> कोर चुनें। जो मैं पहले बनाता हूं और ठीक -> लाइब्रेरी 'कोर' चयनित मॉड्यूल में जोड़ा जाएगा। (Android) ठीक है -> और परियोजना संरचना संवाद में ठीक है।

बिल्ड -> पुनर्निर्माण परियोजना

15 त्रुटियाँ 20 चेतावनियाँ

सभी त्रुटियां त्रुटि हैं: निरंतर अभिव्यक्ति की आवश्यकता होती है और मुझे एंड्रॉइड में ZXing परियोजना के स्विच मामलों में त्रुटि दिखाई देती है I यदि सभी एल के लिए सभी स्विच बदलते हैं।

0 त्रुटियों 20 चेतावनियाँ

ठीक है, अब जारी रखें:

फ़ाइल -> नई परियोजना -> zxing_demo अगला -> अगला -> रिक्त गतिविधि अगला -> समाप्त करें

नई परियोजना में -> फ़ाइल -> आयात मॉड्यूल -> खोज और चयन / Android / OK -> मौजूदा स्रोतों से मॉड्यूल बनाएं अगला -> अगला -> अगला -> अगला -> समाप्त

अब मैं एक्सप्लोरर / एंड्रॉइड / / zging_demoProject / और बाहरी पुस्तकालयों में देख सकता हूं

अब मैं अपना कोड tu स्कैन QR बदल देता हूं

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.zxing_demo"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature
    android:name="android.hardware.camera.autofocus"
    android:required="false" />
<uses-feature
    android:name="android.hardware.touchscreen"
    android:required="false" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.zxing_demo.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:clearTaskOnLaunch="true"
        android:stateNotNeeded="true"
        android:configChanges="orientation|keyboardHidden"
        android:name="com.google.zxing.client.android.CaptureActivity"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateAlwaysHidden" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <intent-filter >
            <action android:name="com.google.zxing.client.android.SCAN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

MainActivity.java

package com.example.zxing_demo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
    intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
    startActivityForResult(intent, 0);
}


public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            // Handle successful scan
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
}

}

अब परीक्षण, भागो -> डिबग

और CRASH

logcat

08-31 02:58:28.085  20665-20665/com.example.zxing_demo E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.zxing_demo/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
    at android.app.ActivityThread.access$600(ActivityThread.java:127)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4448)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882)
    ... 11 more

मैं इस लाइन में AndroidManifest.xml देख सकता हूं

android:name="com.google.zxing.client.android.CaptureActivity"

लाल रंग में "कैप्चरएक्टिविटी" और त्रुटि कहती है: प्रतीक 'कैप्चर एक्टिविटी' को हल नहीं कर सकता

फ़ाइल -> परियोजना संरचना -> मॉड्यूल -> zxing_demo -> निर्भरता -> जोड़ें -> मॉड्यूल निर्भरता -> Android ठीक -> लागू करें और ठीक

अब कैप्चरएक्टिविटी अच्छी लगती है

फिर से डिबग करें

08-31 03:06:58.513  21740-21740/com.example.zxing_demo E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.zxing_demo/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
    at android.app.ActivityThread.access$600(ActivityThread.java:127)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4448)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882)
    ... 11 more

मुझे लगता है कि मैं एप्लिकेशन और इंटेंट्स का उपयोग करूंगा, लेकिन अब मैं यह काम करना चाहता हूं, अगर कोई अब ऐसा करता है तो कृपया मुझे बताएं।


इस सवाल के बहुत सारे विचार हैं इसलिए अगर यह किसी को भी मदद करता है [यहाँ मेरी समान समस्या है] [1] [१]: stackoverflow.com/questions/20334572/…
डैनियल विल्सन

जवाबों:


234

मैं एक एंड्रॉइड एप्लिकेशन में ZXING को एकीकृत कर रहा था और सभी इनपुट के लिए कोई अच्छा स्रोत नहीं थे, मैं आपको मेरे लिए काम करने पर एक संकेत दूंगा - क्योंकि यह बहुत आसान निकला

वहाँ एक वास्तविक काम git भंडार है zxingजो AAR संग्रह के रूप में android पुस्तकालय परियोजना प्रदान करता है ।

आपको बस इसे अपने build.gradle में जोड़ना है

repositories {
    jcenter()
}

dependencies {
    implementation 'com.journeyapps:zxing-android-embedded:3.0.2@aar'
    implementation 'com.google.zxing:core:3.2.0'
}

और ग्रैडल कोड को संकलित करने के लिए सभी जादू करता है और इसे आपके ऐप में सुलभ बनाता है।

बाद में स्कैनर शुरू करने के लिए, इस वर्ग / विधि का उपयोग करें: गतिविधि से:

new IntentIntegrator(this).initiateScan(); // `this` is the current Activity

एक टुकड़े से:

IntentIntegrator.forFragment(this).initiateScan(); // `this` is the current Fragment
// If you're using the support library, use IntentIntegrator.forSupportFragment(this) instead.

कई कस्टमाइज़िंग विकल्प हैं:

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES);
integrator.setPrompt("Scan a barcode");
integrator.setCameraId(0);  // Use a specific camera of the device
integrator.setBeepEnabled(false);
integrator.setBarcodeImageEnabled(true);
integrator.initiateScan();

उनके पास एक नमूना-परियोजना है और कई एकीकरण उदाहरण प्रदान कर रहे हैं:

यदि आप पहले से ही उस लिंक पर गए हैं जिसे आप यह देखने जा रहे हैं कि मैं सिर्फ GAT README से कोड कॉपी और पेस्ट कर रहा हूं। यदि नहीं, तो कुछ अधिक जानकारी और कोड उदाहरण प्राप्त करने के लिए वहां जाएं।


3
भारी मदद। मैंने एक दिन दूसरी परियोजना से ज़क्सिंग को आयात करने की कोशिश में बिताया था और कहीं नहीं मिल रहा था। तब मुझे यह लिंक मिला और BAM यह हो गया। इस लिंक से ऊपर दिए गए कोड उदाहरण का अनुसरण करें: github.com/zxing/zxing/wiki/Scanning-Via-Intent
जैक बेइम्बल

1
कोड काम करता है !! मेरे पास एक मुद्दा है, मुझे स्कैनर पोर्ट्रेट चाहिए और स्क्रीन को स्कैन करने के लिए कस्टम लेआउट जोड़ने की आवश्यकता है क्या कोई मुझे बता सकता है कि कैसे प्राप्त करें ??
हर्ष त्रिवेदी

2
अभिविन्यास को बदलने के लिए, कैप्चरएक्टिविटी को बढ़ाते हुए एक नई गतिविधि बनाएं और अपने AndroidManifest.xml में ओरिएंटेशन निर्दिष्ट करें।
चातुर्मास

जब फ्रेगमेंट में कॉन्टीन्यूसैप्टचर का उपयोग करके मेरे ऐप को चलाने की कोशिश की जा रही है: त्रुटि: कार्य के लिए निष्पादन विफल रहा ': ऐप: ट्रांसफॉर्मक्लेसविडेडेक्सफॉरबग'। > com.android.build.transform.api.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: प्रक्रिया 'कमांड' C: \ Program Files \ Java \ jdk1.8.0.0 _60 \ bin \ java.exe '' गैर-शून्य निकास मान के साथ समाप्त हुआ 2
कोंस्टेंटिन कोनपोको

1
@Janpan; हाँ यह करता है!
लैंगस्टेन गुस्टेल

7
buttion.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                new com.google.zxing.integration.android.IntentIntegrator(Fragment.this).initiateScan();
            }
        });

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null) {
            if(result.getContents() == null) {
                Log.d("MainActivity", "Cancelled scan");
                Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
            } else {
                Log.d("MainActivity", "Scanned");
                Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            }
        } else {
            // This is important, otherwise the result will not be passed to the fragment
            super.onActivityResult(requestCode, resultCode, data);
        }
    }



dependencies {
    compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
    compile 'com.google.zxing:core:3.2.1'
    compile 'com.android.support:appcompat-v7:23.1.0'
}

7

कोई भी समान समस्याओं का सामना कर रहा है, सरल चरणों का पालन करें:

विकल्प का उपयोग करके androidडाउनलोड किए गए zxing-masterज़िप फ़ाइल से प्रोजेक्ट को आयात करें Import project (Eclipse ADT, Gradle, etc.)और अपने ऐप स्तर build.gradleफ़ाइल में कोड की डोलिंग 2 लाइनों को जोड़ें और आप चलाने के लिए तैयार हैं।

इतना सरल, याह ...

dependencies {
        // https://mvnrepository.com/artifact/com.google.zxing/core
        compile group: 'com.google.zxing', name: 'core', version: '3.2.1'
        // https://mvnrepository.com/artifact/com.google.zxing/android-core
        compile group: 'com.google.zxing', name: 'android-core', version: '3.2.0'

    }

आप हमेशा नवीनतम संस्करण पा सकते हैं coreऔर android coreनीचे दिए गए लिंक से:

https://mvnrepository.com/artifact/com.google.zxing/core/3.2.1 https://mvnrepository.com/artifact/com.google.zxing/android-core/3.2.0

अद्यतन (29.05.2019)

इन निर्भरताओं को जोड़ने के बजाय:

dependencies {
    implementation 'com.google.zxing:core:3.4.0'
    implementation 'com.google.zxing:android-core:3.3.0'
}

बहुत सरल जवाब :) कई आर एंड डी के बाद मुझे यह लिंक मिला, और ऐसा लगता है कि जादू हुआ है।
रामकेश यादव

1
अब नवीनतम संस्करण कोर और एंड्रॉइड कोर निर्भरताएं हैं {// mvnrepository.com/artifact/com.google.zxing/core कार्यान्वयन समूह: 'com.google.zxing', नाम: 'कोर', संस्करण: '3.3.2' / / mvnrepository.com/artifact/com.google.zxing/android-core कार्यान्वयन समूह: 'com.google.zxing', नाम: 'android-core', संस्करण: '3.3.0'}
रामकेश यादव

मैं इसे पहले से बने प्रोजेक्ट में विलय करना चाहता हूं, नई परियोजना के रूप में आयात नहीं करना चाहता, तो मैं इसे कैसे प्राप्त कर सकता हूं? तत्काल मदद की आवश्यकता है :)
रामकेश यादव

धन्यवाद! मुझे परियोजना को आयात करना और निर्भरता जोड़ना था।
CoolMind

0

संस्करण 4.x से, केवल Android SDK 24+ डिफ़ॉल्ट रूप से समर्थित है, और Androidx की आवश्यकता है।

अपनी build.gradle फ़ाइल में निम्न जोड़ें:

repositories {
    jcenter()
}

dependencies {
    implementation 'com.journeyapps:zxing-android-embedded:4.1.0'
    implementation 'androidx.appcompat:appcompat:1.0.2'
}

android {
    buildToolsVersion '28.0.3' // Older versions may give compile errors
}

पुराने एसडीके संस्करण

एंड्रॉइड एसडीके संस्करणों के लिए <24, आप ज़ोक्सिंग को डाउनग्रेड कर सकते हैं: कोर को 3.3.0 या इससे पहले एंड्रॉइड 14+ समर्थन के लिए:

repositories {
    jcenter()
}

dependencies {
    implementation('com.journeyapps:zxing-android-embedded:4.1.0') { transitive = false }
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'com.google.zxing:core:3.3.0'
}

android {
    buildToolsVersion '28.0.3'
}

आपको अपने Android मेनिफ़ेस्ट में भी इसकी आवश्यकता होगी:

<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />

स्रोत: https://github.com/journeyapps/zxing-android-embedded


-1

इस ट्यूटोरियल मदद मुझे एंड्रॉयड स्टूडियो में एकीकृत करने के लिए: http://wahidgazzah.olympe.in/integrating-zxing-in-your-android-app-as-standalone-scanner/ अगर नीचे की कोशिश इस

बस AndroidManifest.xml में जोड़ें

<activity
         android:name="com.google.zxing.client.android.CaptureActivity"
         android:configChanges="orientation|keyboardHidden"
         android:screenOrientation="landscape"
         android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
         android:windowSoftInputMode="stateAlwaysHidden" >
         <intent-filter>
             <action android:name="com.google.zxing.client.android.SCAN" />
             <category android:name="android.intent.category.DEFAULT" />
         </intent-filter>
     </activity>

उममीद है कि इससे मदद मिलेगी!।


14
दोनों लिंक 404 हैं
prgmrDev

इससे कोई
फायदा

@deepakgates: पुराना, क्या आप जांचने के लिए कुछ कोड ला सकते हैं?
हिरीघोशी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.