2012-04-03 42 views
8

Tôi đang cố gắng hiểu liệu có thể chia ứng dụng Android thành hai phần (được cài đặt từ một APK) hay không. Tôi nhìn vào đây để cài đặt một phần trên bộ nhớ thiết bị và một phần khác trên SD-CARD. Hai phần thuộc về nhau và không nên được cài đặt riêng biệt.Chia ứng dụng Android thành hai phần

Lưu ý: Tôi cần tách riêng không chỉ tài nguyên mà còn cả hoạt động, do đó, APK Expansion Files không phải là giải pháp, vì không cung cấp chức năng như vậy.

+0

Ý của bạn là gì với "cài đặt riêng"? tôi cho rằng bạn có một số tài nguyên (như hình ảnh, video) để cài đặt trong thẻ SD cho các vấn đề về bộ nhớ, phải không? hoặc ý bạn là gì? –

+0

Tôi có nghĩa là đối với thiết bị, hai phần phải được cài đặt/gỡ bỏ cùng nhau. Ứng dụng mà tôi đang nghĩ đến có một phần mà tôi muốn luôn luôn có sẵn (cài đặt trên bộ nhớ thiết bị) và một phần mà người dùng có thể làm cho không có sẵn (tạm thời) bằng cách loại bỏ SD-CARD. Ngoài ra khi người dùng quyết định di chuyển ứng dụng đến hoặc từ SD-CARD, phần mà tôi muốn cài đặt trong bộ nhớ thiết bị phải luôn ở đó. – Louis

+0

Điều này là không thể với một ứng dụng duy nhất. Nhưng bạn sẽ có thể làm điều đó với 2 ứng dụng riêng biệt. –

Trả lời

0

Bạn có thể, nhưng không vì lý do của bạn. Nhiều APK chỉ nhằm đảm bảo ứng dụng của bạn hoạt động cho nhiều thiết bị - không chia tổng kích thước của nó giữa bộ nhớ trong và thẻ SD.

Multiple APK Support

Mặc dù chúng tôi khuyến khích bạn phát triển và xuất bản một APK duy nhất hỗ trợ nhiều cấu hình thiết bị càng tốt, làm như vậy là đôi khi không thể thực hiện. Để giúp bạn xuất bản ứng dụng của mình với số lượng nhiều thiết bị nhất có thể, Google Play cho phép bạn xuất bản nhiều APK trong cùng một danh sách ứng dụng. Google Play sau đó cung cấp mỗi APK cho các thiết bị phù hợp dựa trên hỗ trợ cấu hình bạn đã khai báo trong tệp kê khai của từng APK.

Bằng cách xuất bản ứng dụng của bạn với nhiều APK, bạn có thể:

Hỗ trợ các định dạng nén kết cấu OpenGL khác nhau với từng APK.

Hỗ trợ các cấu hình màn hình khác nhau với từng APK.

Hỗ trợ các phiên bản nền tảng khác nhau với từng APK.

Hiện tại, đây là những đặc điểm thiết bị duy nhất mà Google Play hỗ trợ xuất bản nhiều APK dưới cùng một ứng dụng.

+0

Cảm ơn bạn đã trả lời, nhưng đó không phải là ý tôi. Ứng dụng của tôi có hai phần mà luôn luôn có sẵn và một phần có thể không khả dụng khi người dùng xóa thẻ SD-CARD của mình và sau đó có sẵn khi thẻ được lắp lại. – Louis

0

Ứng dụng của bạn chỉ có thể kiểm tra thời tiết thẻ sd hiện có sẵn ("đã cắm") hay không. Nếu nó có sẵn ứng dụng của bạn hoạt động như bình thường và nếu thẻ sd không có sẵn các ứng dụng sẽ tự động thoát/hiển thị một pop-up/khởi động các hoạt động khác nhau/bất cứ điều gì.

+0

cách đẩy thẻ sd vào các hoạt động và dịch vụ được chọn trong quá trình "di chuyển"? – msangel

+0

xin lỗi, tôi không hiểu câu của bạn hoàn toàn: x – jdstaerk

+0

từ tác giả nhận xét: "Ứng dụng tôi đang nghĩ đến có một phần mà tôi muốn luôn sẵn sàng (cài đặt trên bộ nhớ thiết bị) và một phần mà người dùng có thể thực hiện không khả dụng (tạm thời) bằng cách xóa SD-CARD. " – msangel

0

Nếu bạn chỉ đang tìm cách giữ tài nguyên ứng dụng trên ổ đĩa ngoài, Harry's answer sẽ hữu ích.

Nếu không, bạn không thể chia một cài đặt ứng dụng thành hai phần. Bạn có thể sử dụng thuộc tính kê khai android:installLocation để xác định nơi bạn muốn cài đặt và thậm chí bạn có thể buộc nó vào chỉ cài đặt nội bộ trên thiết bị, nhưng không có tùy chọn để tách nó.

Alternatives

Hai Apps

Bạn tạo hai hai ứng dụng riêng biệt và kiểm tra trên đầu của bất kỳ trong số họ, nếu một trong những khác được cài đặt.Nếu không, bạn yêu cầu người dùng cài đặt ứng dụng khác và chuyển người dùng đến cửa hàng ứng dụng.

Một ứng dụng kiểm tra lưu trữ bên ngoài

Tôi không biết trường hợp sử dụng của bạn, nhưng từ ý kiến ​​của bạn có vẻ như bạn đang tìm kiếm các giải pháp sai.

Ứng dụng tôi đang nghĩ về có một phần mà tôi muốn luôn sẵn sàng (cài đặt trên bộ nhớ thiết bị) và một phần mà người dùng có thể không khả dụng (tạm thời) bằng cách tháo SD-CARD. Ngoài ra khi người dùng quyết định di chuyển ứng dụng đến hoặc từ SD-CARD, phần mà tôi muốn cài đặt trong bộ nhớ thiết bị phải luôn ở đó.

Bạn chỉ có thể kiểm tra xem bộ nhớ ngoài có khả dụng không và chặn một số hoạt động nhất định nếu không. Nếu bạn muốn chắc chắn, đó là cùng một thẻ SD, bạn có thể tạo một UUID trong lần chạy đầu tiên và lưu nó cả trong và ngoài. Nếu chúng khớp với thẻ SD chính xác.

Kết luận

giải pháp của bạn có thể là quá phức tạp và bạn nên tìm kiếm giải pháp thay thế.

1

Tệp mở rộng APK

Google Play hiện yêu cầu tập tin APK của bạn không quá 100MB. Đối với hầu hết các ứng dụng, đây là rất nhiều không gian cho tất cả các mã và tài sản của ứng dụng. Tuy nhiên, một số ứng dụng cần thêm dung lượng cho đồ họa độ trung thực cao, tệp phương tiện hoặc các tài sản lớn khác. Trước đây, nếu ứng dụng của bạn vượt quá 100MB, bạn phải tự lưu trữ và tải xuống các tài nguyên bổ sung khi người dùng mở ứng dụng. Lưu trữ và phân phối các tệp phụ có thể tốn kém và trải nghiệm người dùng thường ít hơn lý tưởng. Để giúp quá trình này dễ dàng hơn cho bạn và dễ chịu hơn cho người dùng, Google Play cho phép bạn đính kèm hai tệp mở rộng lớn bổ sung APK của bạn.

Google Play lưu trữ các tệp mở rộng cho ứng dụng của bạn và cung cấp chúng cho thiết bị miễn phí cho bạn. Các tệp mở rộng được lưu vào vị trí lưu trữ dùng chung của thiết bị (thẻ SD hoặc phân vùng có thể gắn USB), còn được gọi là bộ nhớ "bên ngoài", nơi ứng dụng của bạn có thể truy cập chúng. Trên hầu hết các thiết bị, Google Play sẽ tải xuống (các) tệp mở rộng cùng một lúc để tải xuống APK, vì vậy, ứng dụng của bạn có mọi thứ cần thiết khi người dùng mở tệp lần đầu tiên. Tuy nhiên, trong một số trường hợp, ứng dụng của bạn phải tải xuống các tệp từ Google Play khi ứng dụng của bạn bắt đầu.

Tải các tệp mở rộng

Trong hầu hết các trường hợp, Google Play tải và lưu các tập tin mở rộng của bạn với thiết bị cùng một lúc nó cài đặt hoặc cập nhật APK. Bằng cách này, các tệp mở rộng khả dụng khi ứng dụng của bạn khởi chạy lần đầu tiên. Tuy nhiên, trong một số trường hợp, ứng dụng của bạn phải tự tải xuống các tệp mở rộng bằng cách yêu cầu chúng từ URL được cung cấp cho bạn trong phản hồi từ dịch vụ Cấp phép ứng dụng của Google Play.

Logic cơ bản bạn cần phải tải tệp mở rộng của bạn như sau:

Khi bắt đầu ứng dụng của bạn, tìm kiếm các tập tin mở rộng về vị trí lưu trữ chia sẻ (trong Android/obb // thư mục). Nếu các tệp mở rộng ở đó, bạn đã sẵn sàng và ứng dụng của bạn có thể tiếp tục. Nếu các tệp mở rộng không có ở đó: Thực hiện yêu cầu bằng cách sử dụng Cấp phép ứng dụng của Google Play để nhận tên, kích thước và URL của tệp mở rộng của ứng dụng. Sử dụng các URL do Google Play cung cấp để tải xuống các tệp mở rộng và lưu các tệp mở rộng. Bạn phải lưu tệp vào vị trí lưu trữ được chia sẻ (Android/obb //) và sử dụng tên tệp chính xác do phản hồi của Google Play cung cấp.

Source

+0

Các tệp mở rộng dành cho nội dung không dành cho mã chương trình như hoạt động. –

0

Vâng, có thể. Nhưng với một báo trước, nó sẽ có thể cài đặt cả hai ứng dụng một cách riêng biệt, vì cả hai ứng dụng nên được tải lên cửa hàng. Bạn chỉ cần sử dụng rất nhiều ý định.

Bạn sẽ cần xử lý tất cả các liên lạc giữa cả hai ứng dụng bằng cách sử dụng ý định. Điều đó có nghĩa là mọi thứ mà ứng dụng đầu tiên cần phải được hỏi bằng cách sử dụng ý định cho ứng dụng thứ hai và không tìm thấy ứng dụng khác trong thiết bị sẽ kích hoạt ý định của cửa hàng phát. Bằng cách này, bạn sẽ có hai ứng dụng hoạt động như một ứng dụng. Hãy ghi nhớ, người dùng vẫn sẽ xác định nơi để cài đặt ứng dụng của bạn, nhưng như christian-strempfer chỉ, thẻ SD có thể được đặt làm mục tiêu ưa thích.

Nếu mục đích của việc này là tiết kiệm dung lượng, bạn nên tạo nguồn lực (hình ảnh, âm thanh, v.v.) động. Vì tất cả chỉ là các tệp bên trong gói ứng dụng, bạn có thể dễ dàng thay thế chúng bằng các tệp từ thẻ SD. Bạn chỉ cần tải chúng lên một nơi nào đó và tải chúng xuống sau khi ứng dụng được cài đặt. Bằng cách đó, bạn có thể cung cấp phiên bản chính xác của từng nội dung và xóa chúng khi cần. Bạn có thể tìm hiểu màn hình nào được sử dụng nhiều nhất và xóa nội dung cho màn hình bạn sử dụng ít hơn. Vv

3

Tôi nghĩ điều đó là có thể. Bạn có thể thử cách tiếp cận sau đây không?

  1. Tạo hai ứng dụng
  2. Trong tập tin Manifest của APK đầu tiên, bạn nên có một Hoạt động đó là của chính và Launcher loại. Bằng cách này, ứng dụng của bạn sẽ hiển thị trong danh sách Launcher
  3. Bạn không nên có bất kỳ Hoạt động nào trong danh mục CHÍNH VÀ LAUNCHER trong APK thứ 2, nhưng bạn biết Hoạt động nào bạn phải mở dưới dạng Hoạt động của ứng dụng thứ hai vì đó là ứng dụng của riêng bạn. Bằng cách này ứng dụng thứ hai của bạn sẽ không bao giờ xuất hiện trong Launcher danh sách các ứng dụng
  4. Đặt apk 2 trong thư mục tài sản của APK đầu tiên
  5. Bất cứ khi nào ứng dụng chính của bạn muốn sử dụng nội dung từ ứng dụng thứ 2, cài đặt ứng dụng thứ 2 từ thư mục nội dung (as mentioned here) với cài đặt vị trí cài đặt trên SDCard như thế này: android:installLocation="preferExternal" và sau đó khởi chạy hoạt động mong muốn của ứng dụng thứ hai của bạn

Tôi chưa thử điều này nhưng về mặt lý thuyết có vẻ hợp pháp.

Hãy cho tôi biết nếu công trình này hoạt động. Cảm ơn!

+0

Có lẽ trước tiên bạn sẽ phải bật cài đặt APK "từ các nguồn không xác định" trong tùy chọn bảo mật. –

+0

Có lẽ là có. Nhưng tôi tin rằng đây sẽ là giải pháp gần nhất cho câu hỏi của Louis. – Shrikant

0

Bạn có thể tạo hai hoạt động khởi chạy khác nhau từ một APK bằng cách xác định hai mục nhập CHÍNH CHÍNH trong Tệp kê khai.xml

<activity android:name=".ChooserActivity" 
      android:label="Auth Firebase"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 


     <activity android:name=".GoogleSignInActivity" 
      android:label="Auth Google" 
      android:installLocation="preferExternal"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

này sẽ tạo ra hai điểm nhập cảnh cho một ứng dụng, hai biểu tượng launcher khác nhau một trong những tên "Auth căn cứ hỏa lực" và khác có tên "Auth Google" cả hai sẽ mở ra các hoạt động khác nhau.

+0

Tôi nghĩ bạn hiểu sai câu hỏi. –