2010-12-22 9 views
6

LƯU Ý: Đây là một câu hỏi cũ, và câu trả lời tương ứng upvoted cũ có thể không liên quan - xem câu trả lời mới về xây dựng biến thể (còn gọi là App Hương).Android - Ứng dụng Nhãn trắng

Tôi có câu hỏi về việc xuất bản lên thị trường.

Company, X, cung cấp các dịch vụ tương tự cho các công ty A & B và cả hai A & B muốn một ứng dụng trên thị trường. Công ty X muốn viết chỉ một ứng dụng và phân biệt giữa chúng bằng cách sử dụng các biểu tượng thích hợp, cài đặt cấu hình, chuỗi ngôn ngữ tại thời gian biên dịch. Tuy nhiên, khi nói đến xuất bản, các ứng dụng có cùng tên gói ứng dụng (sử dụng cơ sở mã được chia sẻ). Ứng dụng sẽ được duy trì và

Vì vậy, với điều kiện tôi muốn giữ một cơ sở mã duy nhất, phương pháp hay nhất ở đây là gì?

Trả lời

4

Xem bài đăng trên blog này, blog.javia.org/android-package-name/.

[sửa] Để tránh mất thông tin nếu liên kết này chết: đó là bài đăng về sự khác biệt về định nghĩa gói ứng dụng và định nghĩa gói java. Có thể thay đổi gói ứng dụng (bên trong tệp kê khai) mà không cần chạm vào gói java của các nguồn. [/ Edit]

8

Theo tôi biết bạn không thể có hai ứng dụng trên Market có cùng tên gói. Để tránh sao chép-dán mã chia sẻ, bố trí, drawables, vv Tôi khuyên bạn nên đặt các tài nguyên này vào một dự án thư viện và sau đó tham chiếu dự án này từ ứng dụng A và B mà bạn đề cập đến và trong các ứng dụng này chỉ ghi đè các giá trị bạn muốn thay đổi .

Tìm hiểu thêm về dự án thư viện trong the official documentation.

+0

Chắc chắn, đó là những dự án thư viện được phát minh. Chúng tôi vừa chuyển đổi một ứng dụng thành một lược đồ "đầy đủ + lite" và chuyển đổi dự án ban đầu thành một dự án thư viện và sau đó tách nó thành hai dự án dễ dàng như chiếc bánh. – Felix

+0

Cảm ơn @johan - cũng để tham khảo, nó cũng có thể sử dụng đối số dòng lệnh --custom-package với aapt trong xây dựng.xml, như được mô tả ở đây: http://blog.elsdoerfer.name/2010/04/29/android-build-multiple-versions-of-a-project/ - Cách tiếp cận thư viện âm thanh tốt hơn đặt cược dài hạn với tôi tho – Kevin

+0

liên kết đã cho bị hỏng :( – Moorthy

2

câu trả lời của johan là chính xác. Trong công ty của tôi, chúng tôi vừa xây dựng một kịch bản nhỏ tạo ra 'thương hiệu' ứng dụng từ một ứng dụng 'cơ sở', không chỉ áp dụng tài nguyên mới mà còn tạo tên gói tùy chỉnh và vá các tệp XML thích hợp.

1

Tôi đồng ý với những gì Reflog đã nói, công ty của tôi đã sử dụng kịch bản kiến ​​để thay đổi tên gói cho từng thương hiệu và cũng để thay thế tài nguyên khi cần. Tôi đã viết ứng dụng cơ sở với hành vi mặc định trong tâm trí và tạo thư mục cho mỗi thương hiệu bổ sung chỉ chứa các tệp khác với cơ sở, giống như nhiều thư mục có thể vẽ với kích thước dpi khác nhau ("drawable", "drawable-hdpi". ..). Các thay đổi khác bao gồm sửa đổi các tệp chuỗi cho từng thương hiệu để có màu sắc và văn bản pháp lý phù hợp.

Bằng cách đặt tên chúng theo kiểu bản địa hóa (ví dụ "drawable-en-rAA-hdpi", "layout-en-rBB" ...), tôi đã có thể thử nghiệm điều này nhanh chóng trong nhiều trình giả lập bằng cách mở " Tùy chỉnh miền địa phương "ứng dụng trong mỗi trình giả lập và đặt ngôn ngữ thành" en_AA "," en_BB "khi cần. Bằng cách lưu nhiều bản sao của cơ sở AVD, tôi đã có thể lưu các cài đặt đó vì vậy tôi không phải chuyển đổi trong trình mô phỏng để kiểm tra tất cả các thương hiệu cuối cùng.

Một cảnh báo trước cho phương pháp này là phiên bản mô phỏng ứng dụng này sẽ bao gồm tất cả các tệp trong .apk, trong khi tập lệnh kiến ​​loại bỏ các bản sao. Ngoài ra, trong khi "full" này .apk sẽ cài đặt trên thiết bị, nó sẽ chỉ hiển thị hành vi mặc định trừ khi bạn có thể đặt ngôn ngữ trên thiết bị để khớp với ngôn ngữ thương hiệu. (Tùy chỉnh Locale không được cài đặt trên bất kỳ thiết bị vật lý của tôi.) Điều này hoạt động tốt nếu bạn cố ý sử dụng tên miền hiện có tên (en_AU, en_CA, en_GB), nhưng có thể có vấn đề cho tên tùy chỉnh (en_B1, en_XX).

1

Tôi biết tôi là một chút muộn để dự buổi tiệc nhưng bạn có thể làm điều này bằng cách:

1) Thay đổi project.properties của bạn bằng cách thêm dòng manifestmerger.enabled=true

2) Thay đổi tên gói của bạn trong tệp kê khai.

3) Cập nhật/thay đổi tài nguyên, bản vẽ, chuỗi, bất kỳ điều gì.

4) Đánh dấu dự án chính của bạn là thư viện và đặt sự phụ thuộc cho dự án trong dự án nhãn trắng của bạn. Voila, nhãn trắng!

1

Đây là một câu hỏi khá cũ. Tuy nhiên, bây giờ tôi nghĩ cách tiếp cận tốt nhất sẽ là sử dụng Product Flavours cho Android bằng cách sử dụng hệ thống xây dựng gradle mới.

  • Đối với mỗi hương vị bạn có thể xác định applicationId. Có sự khác biệt giữa packageNameapplicationId. ApplicationId nhận dạng duy nhất ứng dụng của bạn trên thiết bị và trong Cửa hàng Google Play. Cái thứ hai là cho không gian tên mã. Bạn có thể đọc thêm tại đây: https://developer.android.com/studio/build/application-id.html
  • Đối với mỗi hương vị, bạn có thể có các loại bản vẽ, chuỗi, tệp xml khác bằng cách sử dụng thư mục cụ thể cho hương vị. Bạn chỉ cần đặt những tài sản đó vào các tệp mới, khác với các tài sản trong thư mục main. Sau đó, có buildConfigField bạn có thể xác định cho mỗi hương vị trong build.gradle có thể được truy cập từ tệp Java dưới dạng cấu hình của bạn cho mỗi danh sách trắng.
  • Ngoài ra, bạn có thể xác định resValue cho mỗi hương vị từ đó.
  • Bạn cũng có thể đặt AndroidManifest.xml có thể định cấu hình cho các khóa, v.v. sử dụng manifestPlaceholders.
1

Những gì bạn cần là Xây dựng các biến thể (a.k.a. Hương vị ứng dụng).

Bạn có thể đọc lên trên đó đây https://developer.android.com/studio/build/build-variants.html

Nói tóm lại, điều này cho phép bạn có các biến thể khác nhau của ứng dụng của bạn chia sẻ một phần của mã và nguồn lực, nhưng có thể có thay thế riêng của họ là tốt. Bạn có thể chỉ định tên/id gói khác nhau cho mỗi biến thể, trong số các thứ khác (như biểu trưng, ​​màu sắc, màn hình giật gân và thậm chí cả mã java).

defaultConfig { 
    applicationId "com.example.example" 
    minSdkVersion 16 
    targetSdkVersion 25 
    versionCode 1 
    versionName "1.0.0" 
} 

productFlavors { 
    variantone { 
      applicationId 'com.company1.example' 
    } 
    varianttwo { 
      applicationId 'com.company2.example' 
    } 
} 

Bạn có thể tạo thư mục tài nguyên với tên của các biến thể nơi bạn có thể đặt tài nguyên hoặc mã nguồn thay thế của mình. Ví dụ: src/variantone/res

Chuyển đổi giữa các biến thể xây dựng trong Android Studio không dẫn đến thay đổi tệp (bạn chỉ cần chọn "đầu ra"). Bạn có thể tạo APK cho tất cả các biến thể bạn muốn cùng một lúc. Sử dụng thuật sĩ trong Xây dựng/Tạo APK đã ký.

P.S. Dưới đây là cách bạn có thể có tên gói khác cho các bản dựng Gỡ lỗi:

buildTypes { 
    release { 
    } 
    debug { 
     applicationIdSuffix '.debug' 
     versionNameSuffix '.debug' 
    } 
}