2012-04-13 46 views
6

lúc đầu tôi phải nói rằng tôi không giỏi tiếng Anh, vì vậy tôi xin lỗi nếu tôi có thể giải thích rất rõ ý tôi là gì :)Eclipse: nhiều dự án từ nguồn đơn

Tôi có một dự án tôi cần lặp lại n lần; mỗi dự án mới phải có cùng mã nguồn, nhưng các tài nguyên khác nhau (ví dụ: hình ảnh, tệp html, âm thanh, pdf, v.v.) và các tên lớp/gói khác nhau.

dự án của tôi không phải là java chuẩn, nhưng android + phonegap. Tôi có một plugin eclipse mà tạo ra một dự án trống phonegap ... có lẽ có một cách để sửa đổi plugin này để tạo ra dự án tiêu chuẩn của tôi?

Có thể không? Tốt nhất là cũng có một hệ thống để thực hiện các thay đổi nguồn hình thành dự án chính cho trẻ em, nhưng nó không bắt buộc.

Xin lỗi một lần nữa cho tiếng Anh của tôi.

EDIT:

Xin lỗi nếu tôi chỉnh sửa lại câu hỏi này, nhưng thực sự tôi không thể tìm được giải pháp cho vấn đề của mình.

Tôi muốn tích hợp nó với một ví dụ, có lẽ tôi có thể giải thích những gì tôi cần.

hãy tưởng tượng bạn đã phát triển và ứng dụng android với nhật thực và điện thoại, cho một đội bóng đá, ví dụ Barcelona.

Ứng dụng chủ yếu là trong html + jquerymobile, nhưng bạn đã sửa đổi hoạt động, manifest android, bổ sung một số plugin PhoneGap, một số nguồn phương tiện truyền thông, vv

Bây giờ bạn cần phải sao chép ứng dụng này cho các đội hơn, rất nhiều đội. Đối với tất cả mọi người, bạn phải tạo một dự án phonegap mới, sửa đổi từng tệp, thêm các plugin, thêm nội dung .... những tác vụ đó không thể bị lỗi.

Nhưng vấn đề rất lớn là: nếu bạn chỉ có một chút cập nhật trong mã của bạn, làm thế nào bạn có thể sao chép nó trên các dự án 10/20/50/100/1000?

Tôi cũng đã thêm thẻ android, phonegap và cordova vào bài đăng cụ thể hơn.

Xin lỗi một lần nữa cho tiếng Anh của tôi.

EDIT N ° 2

Tôi chỉ chơi với plugin android maven trong hơn một tuần nay, nhưng không thành công. Những gì tôi cần là mã tập trung, nơi tôi có thể switcch các ứng dụng và packagename, các biểu tượng, và chỉ cần ít tập tin cấu hình.

libs Android không phải là giải pháp vì nó không thể xuất tệp nội dung.

tôi bắt đầu một bounty cho câu hỏi này tìm kiếm một câu trả lời chi tiết ... xin vui lòng giúp đỡ :(

+0

có lẽ tôi đã foun giải pháp. http://stackoverflow.com/questions/8077042/building-many-similar-android-apk-files-at-the-same-time – Laphroaig

+0

Bạn có thành công để sử dụng maven xây dựng một trong những dự án PhoneGap bạn cho đến nay ? – yorkw

Trả lời

0

Bạn có thể đặt mã của bạn trong một dự án và tạo một file jar. Thân thêm dự án này hoặc jar như một sự phụ thuộc

+0

vâng, đây là giải pháp cho một dự án java chuẩn. nhưng tôi là một dự án android/phonegap sẽ biên dịch một tập tin apk ... tôi sẽ cập nhật bài viết đầu tiên của tôi. cảm ơn bạn anyway! – Laphroaig

3

Hy vọng tôi có quyền của bạn khi giả sử bạn đang tìm kiếm một cách tổng quát hơn làm thế nào để làm điều đó sau đó một danh sách thực tế của các tập tin bạn đã thay đổi. Bởi vì đây là một cái gì đó bạn ' có lẽ sẽ không đi xung quanh để tìm ra nó một mình.(Mặc dù dự án Android được cấu trúc tốt nó có thể là đủ để chỉ cần thay đổi res/, asserts/ thư mục và android.manifest tập tin. Tôi chỉ đơn thuần sử dụng bất cứ điều gì thêm về dự án PhoneGap của tôi.

chi nhánh Vì vậy, vũ khí của tôi về sự lựa chọn sẽ được git.
(Some words about git if you've not already heard about it.)

Với cam kết cuối cùng thể hiện ứng dụng đã hoàn thành của bạn, từ đây bạn có thể chia nhỏ dự án để phát hành (ví dụ: Valencia CF) Đảm bảo rằng bạn chỉ thay đổi tài nguyên nhưng không có gì trong chương trình chính! chi nhánh phát triển chính vẫn là phiên bản phát triển nhất!

Vì vậy, sau khi phát hành ứng dụng thứ hai và thứ ba, bạn có thể muốn thực hiện một số sửa lỗi. Bạn sẽ chuyển trở lại chi nhánh phát triển của mình và tiếp tục làm cho mã của bạn tốt hơn nữa. Nhấn vào bản phát hành tiếp theo bạn sẽ lại phân nhánh cho tất cả các nhóm khác mà bạn muốn cập nhật.
Vì vậy, bạn có một vài chi nhánh với phiên bản cập nhật nhưng cùng một tài nguyên trên một mặt và các ứng dụng đã được tạo kiểu trên tất cả các phiên bản cũ của bạn.

Nếu bạn có một khách hàng git quyến rũ, bạn có thể dễ dàng chọn các tệp bạn muốn thay đổi. Điều này có thể khác với việc "wtf-MOAH-pcCra $ h ném máy tính" nếu bạn có nhiều tệp riêng lẻ để hợp nhất nhưng không chỉ đơn giản là các thư mục lớn + vài tệp như res/android.manifest.

Một khả năng khác là sử dụng tính năng git được gọi là cherry-pick. Tôi chưa bao giờ sử dụng nó nhưng mô tả âm thanh khá nhiều như những gì bạn muốn:

Với một hoặc nhiều cam kết hiện có, áp dụng thay đổi mỗi một giới thiệu, ghi nhận mới cam kết cho mỗi. Điều này yêu cầu cây làm việc của bạn phải sạch sẽ (không có sửa đổi từ cam kết CHÍNH).

(Dưới đây là những người giàu có SO thread nơi tôi đã chọn nó lên.)

Bạn có cây làm việc sạch sẽ của bạn vì bạn chỉ nhánh của phiên bản mới của bạn để áp dụng lại thiết kế Valencia CF. Do đó HEAD là sạch sẽ và bạn có thể cherry-chọn các cam kết từ phiên bản cũ, nơi bạn đã áp dụng các thiết kế đã có.
Rất có thể đã có sự thay đổi từ phiên bản cũ sang phiên bản mới yêu cầu cập nhật tài nguyên. (Một số quan điểm đã đi nhưng khác đã giới thiệu ví dụ). Tuy nhiên, hãy tiếp tục và hoàn thành kết quả cuối cùng vì cam kết này sẽ là lựa chọn anh đào cho phiên bản tốt hơn và lớn hơn mà bạn đã bắt đầu làm việc trong chi nhánh đang phát triển của bạn.

Mặc dù không liên quan trực tiếp đến câu hỏi của bạn Tôi cũng khuyên bạn nên đọc A successful Git branching model cung cấp cho bạn một ý tưởng khác về cách bạn có thể sử dụng các nhánh để ủng hộ bạn.

Dù sao tôi không nghĩ đó là giải pháp duy nhất có thể nhưng đối với nó có vẻ là phương pháp thuận tiện nhất. Vì tất cả các phép thuật bạn làm là trong thư mục dự án, bạn chỉ có thể sao chép và dán chúng và chỉnh sửa nội dung theo cách thủ công hoặc thông qua các chương trình thông minh. Nhưng tôi không chắc chắn nơi các tệp dự án Eclipse được lưu trữ và cũng sao chép chúng có lẽ sẽ cho phép Eclipse phát triển một chút. (Tên dự án tương tự nhưng đường dẫn dự án sai, v.v.). Tạo dự án Eclipse mới tất cả các lần cũng có vẻ giống như rất nhiều công việc với tôi. Trong khi git hợp tác độc lập với IDE của bạn (nó không có gì hơn là một thư mục phụ trong dự án.) bạn có thể chỉ cần đóng Eclipse chuyển các nhánh thông qua git và mở lại chương trình và bạn đã có những thay đổi bạn đã áp dụng. (OK, bạn có thể phải nhấp chuột phải vào dự án và nhấn làm mới ... phải.)

7

Từ quan điểm bảo trì, tôi sẽ không xem xét sao chép 1000 dự án dựa trên cùng một cơ sở mã. Tôi sẽ sử dụng một dự án duy nhất quản lý tài nguyên dành riêng cho khách hàng và trao đổi tài nguyên được yêu cầu ở giai đoạn xây dựng dự án. Nói cách khác, 1 dự án để xây dựng 1000 apks, không phải 1000 dự án để xây dựng 1000 apks.

Dựa trên các chi tiết bạn đã đưa ra trong câu hỏi, đúng hướng (theo như tôi thấy) để giải quyết loại tình huống sử dụng này (xây dựng nhiều ứng dụng từ cơ sở nguồn đơn) là áp dụng các công cụ xây dựng bên ngoài như Ant hoặc Maven thống trị quá trình xây dựng (cả hai đều cung cấp khả năng kiểm soát tốt trên từng bước, nghĩa là biên dịch, dex, gói và vv trong suốt chu trình xây dựng hoàn chỉnh) và có thể viết kịch bản lệnh shell để tạo hàng loạt nếu cần.

Tôi không phải là một niềm vui của PhoneGap nhưng có một cái nhìn nhanh chóng thông qua Get Started Guide, dựa trên sự hiểu biết của tôi, nó chỉ là một chồng lớp lập trình trên Android SDK, cung cấp khả năng viết ứng dụng di động. ngôn ngữ (HTML, CSS, Javascript), ứng dụng vẫn giữ bộ khung dự án ban đầu vì vậy tôi sẽ không mong đợi nhiều rắc rối khi viết kịch bản Ant/Maven để xây dựng ứng dụng PhoneGap.

Khi bạn đã xây dựng thành công ứng dụng PhoneGap của mình bằng Maven. Bạn có thể bắt đầu điều tra cách giải quyết kịch bản của bạn, tôi đã thấy kiểu kịch bản tương tự như vậy trước đây trong StackOverflow, hãy xem this threadthis thread cho một số nghiên cứu điển hình. Bạn có thể bắt đầu một dự án Proof of Concept để nghiên cứu khả thi.

Tôi đã đăng một số mã mẫu cho thấy cách Maven đạt được điều này, xem bên dưới.

Mẫu cấu trúc thư mục dự án:

myApp/ 
    src/ 
    res-barcelona/ 
    assets-barcelona/ 
    res-realmadrid/ 
    assets-realmadrid/ 
    ... ... 
    project.properties 
    AndroidManifest.xml 
    pom.xml 

mẫu pom.xml file:

<profiles> 
    <profile> 
    <id>barcelona</id> 
    <properties> 
     <app.package.name>com.company.app.barcelona</app.package.name> 
     <app.res.dir>${project.basedir}/res-barcelona</app.res.dir> 
     <app.assets.dir>${project.basedir}/assets-barcelona</app.assets.dir> 
    </properties> 
    </profile> 
    <profile> 
    <id>realmadrid</id> 
    <properties> 
     <app.package.name>com.company.app.realmadrid</app.package.name> 
     <app.res.dir>${project.basedir}/res-realmadrid</app.res.dir> 
     <app.assets.dir>${project.basedir}/assets-realmadrid</app.assets.dir> 
    </properties> 
    </profile> 
    ... ... 
</profiles> 

.... 

<plugins> 
    <plugin> 
    <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
    <artifactId>android-maven-plugin</artifactId> 
    <version>3.1.1</version> 
    <extensions>true</extensions> 
    <configuration> 
     <sdk> 
     <platform>13</platform> 
     </sdk> 
     <undeployBeforeDeploy>true</undeployBeforeDeploy> 
     <renameManifestPackage>${app.package.name}</renameManifestPackage> 
     <resourceDirectory>${app.res.dir}</resourceDirectory> 
     <assetsDirectory>${app.assets.dir}</assetsDirectory> 
    </configuration> 
    </plugin> 
    ... ... 
</plugins> 

Để xây dựng ứng dụng barcelona.apk, chạy mvn clean install -Pbarcelona.
Để xây dựng app-realmadrid.apk, hãy chạy mvn clean install -Prealmadrid.
Để tạo 1000 trình cắm khác, hãy viết tập lệnh shell.

Plugin Android Maven cung cấp nhiều cấu hình cho phép bạn kiểm soát tốt quá trình xây dựng ở mọi giai đoạn/mục tiêu. Hãy xem Project Documentation để biết chi tiết đầy đủ.

0

Nguồn cho plugin Eclipse AppLaud cho PhoneGap có sẵn here. Nội dung ban đầu của các dự án đã tạo đến từ số resources directory này. Bạn có thể sửa đổi nội dung thành bất kỳ thứ gì bạn muốn và sau đó xây dựng lại plugin. Vì mã có giấy phép EPL, bạn sẽ phải mở nguồn bất cứ điều gì bạn đã sửa đổi.

3

Như bạn đã phát hiện ra, một chia sẻ Android Library project là những gì bạn cần. Thật không may (như bạn đã đề cập) assets chỉ được kế thừa cho các dự án phụ thuộc khi xây dựng bản phát hành với Android Maven Plugin.

Trong dự án của chúng tôi, chúng tôi tạo ra một nhiệm vụ Ant syncAssets.xml cho nhà phát triển xây dựng qua ADT ra nhật thực toàn phần, mà nằm trong thư mục gốc của dự án Thư viện Android:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This is an Ant build script to synchronize assets from Android library "pkonvert-base" 
    because they are not included automatically by the ADT tools. See discussion 
    at http://stackoverflow.com/questions/5889833/android-library-assets-folder-doesnt-get-copied 
    and topic "Library projects cannot include raw assets" at http://developer.android.com/guide/developing/projects/index.html#considerations. 
    The Maven build through the maven-android-plugin automatically includes dependent 
    assets from referenced Android libraries, so this Ant script only has to 
    be executed when the build is executed from within eclipse. --> 
<project name="syncAssets" default="syncAssets" basedir="."> 

    <property name="sync.source.dir" value="${ant.file}/../assets" /> 
    <property name="sync.target.dir" value="${basedir}/assets" /> 

    <target name="syncAssets" description="Synchronize assets from Android library pkonvert-base"> 
      <echo>Synchronizing assets from ${sync.source.dir} to ${sync.target.dir}</echo> 
      <sync todir="${sync.target.dir}"> 
        <fileset dir="${sync.source.dir}" includes="**" /> 
      </sync> 
    </target> 

    <target name="clean" description="Clean up assets"> 
      <delete dir="${sync.target.dir}" /> 
    </target> 
</project> 

nhiệm vụ Ant này đồng bộ hóa nội dung của thư viện dự án assets -folder vào một dự án assets -folder và được kích hoạt bất cứ khi nào xây dựng mới trong Eclipse được kích hoạt. Để thêm thực hiện các kịch bản này để goto dự án Android của bạn Thuộc tính ->Builders và tạo ra một mới Ant Builder mà đã là người đầu tiên trong chuỗi của tất cả các nhà xây dựng được gọi (sử dụng Up nút để di chuyển trình xây dựng Ant lên trên).

Trong tab Main chọn Buildfile ${workspace_loc:/<YOUR_LIBRARY_PROJECT>/syncAssets.xml} và Base directory ${workspace_loc:/<YOUR_PROJECT>}.

Trong Tab Refresh chọn nguồn Refresh sau khi hoàn thànhTài Cụ và chọn thư mục dự án của bạn được làm mới. Ngoài ra, hãy chọn Đệ quy bao gồm các thư mục con.

Trong Tab tiêu đảm bảo rằng các mục tiêu mặc định được thi hành sau khi sạch, trên tay xây dựng và trên tự động xây dựng. Mục tiêu sạch sẽ được thực hiện trong thời gian sạch.

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