2013-12-13 13 views
10

Cách đưa tệp bên ngoài vào 'apk'?Qt 5.2 Bao gồm tệp bên ngoài vào gói Android?

Ví dụ:

Có thư mục "123.txt" trong thư mục chính chứa tệp .pro. Tôi nên thêm gì vào tệp chuyên nghiệp để đặt "123.txt" vào apk.

Tôi đã thử DEPLOYMENT, DEPLOYMENTFOLDERS. Nhưng chúng chỉ hoạt động với Symbian và Windows CE.

Trả lời

9

Có hai cách để làm điều đó, cả hai đề cập dưới "Porting một Qt ứng dụng hiện tại" trên Qt 5.1 Documentation For Android.

  1. Bundle chúng thành một tập tin QRC (chỉ hoạt động đa nền tảng)
  2. Thêm họ vào "tài sản :" thư mục (Android cụ thể)

Đối # 2:

Các "tài sản" direc tory sẽ được tạo khi bạn xây dựng dự án. Tôi đã tìm thấy nó dễ nhất để sử dụng biến "INSTALLS" qmake để sao chép các tệp vào thư mục trước khi nó được đóng gói thành một gói ứng dụng. Sau đây là từ một tập tin qmake cho một dự án tôi đã thực hiện. Lưu ý rằng đối với INSTALLS, đường dẫn đến nội dung sẽ đọc "/ asset", chứ không phải "nội dung" như bạn mong đợi. (Nó thực sự kết thúc trong một thư mục con của không gian làm việc Android build.)

Để truy cập thư mục từ mã trong android, bạn sử dụng "asset:". (Trong ví dụ này, /assets/Samples ==>assets:/Samples.)

# - setup the correct location to install to and load from 
android { 
    # android platform 
    # From: http://community.kde.org/Necessitas/Assets 
    SAMPLES_INSTALL_PATH=/assets/Samples 
} else { 
    # other platforms 
    SAMPLES_INSTALL_PATH=$$OUT_PWD/Samples 
} 

# - setup the 'make install' step 
samples.path = $$SAMPLES_INSTALL_PATH 
samples.files += $$SAMPLE_FILES 
samples.depends += FORCE 

INSTALLS += samples 
+0

1. Tôi đã thử nó (không thành công) nhưng sau đó tôi đã học được rằng Qt không cho phép sử dụng cơ sở dữ liệu đi kèm với tệp qrc ngay cả ở chế độ chỉ đọc. – user2400925

+0

2. Qt 5.2 không tạo ra một thư mục "tài sản". Tôi nên làm gì? – user2400925

+0

Tôi đã cập nhật câu trả lời bằng ví dụ về cách tôi đã sử dụng thư mục asset:. – jwernerny

1

cụ thể để User2400925

Trong QT 5.1 tôi đã sử dụng để sao chép các cơ sở dữ liệu từ thư mục tài sản vào thư mục nhà của người sử dụng, nếu các tập tin không tồn tại. Ứng dụng nào có thể được Ứng dụng sử dụng.

Bạn có thể xem qua this link

4

Bạn có thể sử dụng hệ thống tài nguyên Qt. Theo mặc định, tất cả các ứng dụng Qt có thể truy cập nội dung của tệp qrc bằng tiền tố ": /" hoặc tiền tố lược đồ URL, "qrc:".

Cách tiếp cận khác là triển khai tài nguyên vào thư mục nội dung của gói. Đây là tùy chọn tốt nhất nếu bạn muốn đạt được khả năng tương tác tốt hơn với API Android. Bạn có thể truy cập tất cả các tài nguyên trong thư mục bằng tiền tố "asset:". Không giống như qrc, cách tiếp cận này không phải là một giải pháp đa nền tảng.

Khi bạn tạo dự án, một thư mục có tên là "nội dung" được tạo trong Build-Directory/android-build/. Sau khi sao chép các tệp của bạn trong thư mục nội dung, bạn có thể thêm các tệp này vào chuyên gia của mình:

deployment.files += MyFile1 
deployment.files += MyFile2 
... 
deployment.path = /assets 
INSTALLS += deployment 

Tệp trong nội dung là chỉ đọc. Vì vậy, đầu tiên bạn nên sao chép nó vào một số vị trí khác nếu bạn muốn thay đổi chúng:

QFile dfile("assets:/MyFile1"); 
if (dfile.exists()) 
{ 
    dfile.copy("./MyFile1"); 
    QFile::setPermissions("./MyFile1",QFile::WriteOwner | QFile::ReadOwner); 
} 
1

hơn Một cách đơn giản để làm điều đó:

1) Thêm chuỗi này thành của bạn.pro

ANDROID_PACKAGE_SOURCE_DIR = $$ PWD/android-nguồn

2) Tạo android-nguồn thư mục trong thư mục proj của bạn. Đặt bất kỳ thứ gì bạn cần vào android-sources/assets /. Bạn cũng có thể đặt bất kỳ tệp nào khác, chẳng hạn như AndroidManifest.xml hoặc android-sources/res/drawable/icon.png mà bạn muốn được sao chép và cập nhật vào gói đích.

-1

hơn Một cách đơn giản để làm điều đó:

  1. Thêm chuỗi này vào bạn .pro

ANDROID_PACKAGE_SOURCE_DIR = $$ PWD/android-nguồn

  1. Tạo thư mục nguồn Android trong thư mục proj của bạn. Đặt bất kỳ thứ gì bạn cần vào android-sources/assets /. Bạn cũng có thể đặt bất kỳ tệp nào khác, chẳng hạn như AndroidManifest.xml hoặc android-sources/res/drawable/icon.png mà bạn muốn được sao chép và cập nhật vào gói đích.
+0

Điều này chỉ được sao chép/dán từ câu trả lời của art926 đã đăng hơn một năm trước. – RamenChef

Các vấn đề liên quan