使用 zxing 在 Android 项目中将字符串 QR 编码为图像

QR-encode a String to Image in Android project using zxing

我正在尝试创建 a simple Android app, which would display a QR-coded image - by using zxing library

所以我在我的 Mac OS Yosemite 笔记本上安装了 HomeBrewantmaven 并指向 ANDROID_HOME环境变量到AndroidSDK的位置。

然后我从 GitHub 检查了最新的 zxing 并使用命令 mvn package 构建了它(看起来没有任何错误)(并使用 javac 版本 1.8.0_45).

之后,我在 Eclipse 中用空白 Activity 创建了一个新的 Android 项目,并将 3 个 jar 文件复制到它的 libs 目录中:

不幸的是,我在 MainActivity.java 中的简单代码无法编译:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageView imageView = (ImageView) findViewById(R.id.qrCode);
    String qrData = "Data I want to encode in QR code";
    int qrCodeDimention = 500;
    QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData, 
            null,
            Contents.Type.TEXT, 
            BarcodeFormat.QR_CODE.toString(), 
            qrCodeDimention);

    try {
        Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
        imageView.setImageBitmap(bitmap);
    } catch (WriterException e) {
        e.printStackTrace();
    }
}

错误是(这里fullscreen):

BarcodeFormat cannot be resolved
Contents cannot be resolved to a variable
QRCodeEncoder cannot be resolved to a type
QRCodeEncoder cannot be resolved to a type
WriterException cannot be resolved to a type

但同时我可以通过调用tar工具看到这些(据说Eclipse没有找到)类:

# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i WriterException
-rwxrwxrwx  0 0 0 0 28 Mai 20:35 com/google/zxing/WriterException.class
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i BarcodeFormat
-rwxrwxrwx  0 0 0 0 28 Mai 20:35 com/google/zxing/BarcodeFormat.class
# tar tvfz libs/android-4.7.4.jar | grep -i QRCodeEncoder
-rwxrwxrwx  0 0 0 0 28 Mai 20:39 com/google/zxing/client/android/encode/QRCodeEncoder.class

请问我哪里做错了,为什么 Eclipse 找不到 类?

我也问过我的问题at GitHub

好的,我已经通过查看 android/src/com/google/zxing/client/android/encode/QRCodeEncoder.java:

解决了我的问题(从字符串生成 QR 编码图像)

这是我的 MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ImageView imageView = (ImageView) findViewById(R.id.qrCode);
    try {
        Bitmap bitmap = encodeAsBitmap(STR);
        imageView.setImageBitmap(bitmap);
    } catch (WriterException e) {
        e.printStackTrace();
    }
}

Bitmap encodeAsBitmap(String str) throws WriterException {
    BitMatrix result;
    try {
        result = new MultiFormatWriter().encode(str, 
            BarcodeFormat.QR_CODE, WIDTH, WIDTH, null);
    } catch (IllegalArgumentException iae) {
        // Unsupported format
        return null;
    }
    int w = result.getWidth();
    int h = result.getHeight();
    int[] pixels = new int[w * h];
    for (int y = 0; y < h; y++) {
        int offset = y * w;
        for (int x = 0; x < w; x++) {
            pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
        }
    }
    Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    bitmap.setPixels(pixels, 0, width, 0, 0, w, h);
    return bitmap;
}

此外,我从 Maven repository (here fullscreen 中选取了 core.jar):

最后,Eclipse 无法使用我用 Maven 构建的 jar 文件的原始问题来自 Java 版本 - 将在 Project Properties[=35= 中修复] 或 Eclipse 设置: