Tôi có một ứng dụng Android được biên dịch với AOSP (Kitkat) làm ứng dụng hệ thống android và hoạt động tốt. Ứng dụng của tôi phụ thuộc vào mã gốc được biên dịch bằng Android-NDK làm thư viện 32 bit. Tôi đang sao chép các thư viện gốc trong các ứng dụng Android của mình libs/armeabi thư mục rồi xây dựng ứng dụng Android của tôi trong AOSP (Tôi cũng đã sửa đổi device.mk để sao chép libs của mình trong thư mục /system/lib). Mọi thứ đang hoạt động tốt trên Android Kitkat.cách sử dụng các thư viện gốc 32 bit trên nền tảng Android 64-bit
Khi tôi chuyển ứng dụng của tôi trên Android-L (nền tảng 64bit) sau đó tôi không thể tải thư viện mẹ đẻ của tôi từ một ứng dụng Android và lỗi là như thế nào -
java.lang.UnsatisfiedLinkError: dlopen failed: "libfoobar.so" is 32-bit instead of 64-bit
Tôi đang sử dụng mã java sau để tải library- mẹ đẻ
if (ENABLE_ANDROID_INTEGRATION)
{
System.load("/system/lib/libfoobar.so");
}
else
{
System.loadLibrary("foobar");
}
Khi tôi đang xây dựng mã của tôi với AOSP sau đó ENABLE_ANDROID_INTEGRATION là đúng
More thú vị khi tôi tắt ENABLE_ANDROID_INTEGRATION và xây dựng ứng dụng của tôi trong Eclipse, ngoài AOSP như một ứng dụng "tải" bình thường sau đó ứng dụng của tôi đang chạy tốt trên 64bit nền tảng Android.
Điều tôi muốn biết - làm cách nào tôi có thể xây dựng ứng dụng của mình dưới dạng ứng dụng hệ thống Android gốc với thư viện 32 bit (có nghĩa là xây dựng AOSP) cho nền tảng Android 64 bit?
Những gì tôi đã thử - Tôi đã sử dụng LOCAL_32_BIT_ONLY = true gắn cờ trong tệp Android.mk của ứng dụng Android của tôi nhưng nó không có ích. Có thể tôi không hoàn toàn nhận thức được việc sử dụng cờ này.
Vì tôi sắp hết thời gian nên tôi thích đăng câu hỏi này ở đây thay vì RnD. Nếu có ai phải đối mặt với vấn đề này thì vui lòng hướng dẫn.
Kính trọng, Meraj
Cảm ơn thông tin này. Nó đã giúp tôi rất nhiều để di chuyển đúng hướng. –
Xin chào @MerajAhmad, tôi đang đối mặt với vấn đề tương tự, bạn có thể mô tả cách bạn đã làm không? Cảm ơn bạn – jDourlens