QR-encode String to Image в Android-проекте с использованием zxing

Я пытаюсь создать простое приложение для Android, в котором будет отображаться QR-кодированное изображение - с помощью библиотека zxing.

Итак, я установил HomeBrew, ant и maven на моем ноутбуке Mac OS Yosemite и указал переменную среды ANDROID_HOME на местоположение Android SDK.

Затем я проверил последний zxing из GitHub и построил его (без каких-либо ошибок) с командой mvn package (и используя javac версия 1.8.0_45).

После этого я создал новый проект Android с пустой Activity в Eclipse и скопировал 3 файла jar в его каталог libs:

  • Android/ЛИЭС/ядро-3.2.1-SNAPSHOT.jar
  • Android-ядро/цель/Android-ядро-3.2.1-SNAPSHOT.jar
  • Android/цель/Android-4.7.4.jar

К сожалению, мой простой код в 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();
    }
}

Ошибки (здесь полноэкранный режим):

eclipse screenshot

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

Но в то же время я вижу эти (предположительно не найденные Eclipse) классы, вызывая tar tool:

# 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 не может найти классы?

Я также задал свой вопрос в GitHub.

Ответ 1

Хорошо, я исправил свою проблему (генерации QR-кодированного изображения из строки), посмотрев android/src/com/google/zxing/client/android/encode/QRCodeEncoder.java

screenshot

Вот мой 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;
}

Кроме того, я взял core.jar из репозиторий Maven (здесь полноэкранный режим):

eclipse screenshot

Наконец, жесткая проблема Eclipse, которая не может использовать jar файлы, которые я построил с Maven, исходил из версии Java - для исправления в Project Properties или Eclipse Settings:

JDK screenshot