2011-12-22 63 views
5

Tôi muốn xây dựng hai phiên bản của ứng dụng Android bằng cách sử dụng tệp Apache ant. Vấn đề là, cả hai phiên bản giống hệt nhau ngoại trừ quảng cáo trong phiên bản lite. Tôi đã đọc về cách sử dụng Configurations với kiến ​​tới build các phiên bản gỡ lỗi.Android Ant Build

Lớp sau xác định một số hằng số có thể được tham chiếu trong ứng dụng.

public class Config { 
    // Whether or not to include logging in the app. 
    public final static boolean LOGGING = true; 
} 

Và đây là ví dụ về cách sử dụng hằng số này để xác định xem ghi nhật ký có được bật hay không.

if (Config.LOGGING) { 
    Log.d(TAG, "[onCreate] Success"); 
} 

Bây giờ tôi có thể bật và tắt ghi nhật ký trong tệp thuộc tính của mình.

# Turn on or off logging. 
config.logging=true 

Điều này không có tác dụng, vì trước khi sử dụng cấu hình này, tôi phải tạo tệp cấu hình thứ hai và sử dụng filterset và sao chép.

public class Config { 
    // Whether or not to include logging in the app. 
    public final static boolean LOGGING = @[email protected]; 
} 

Điều đó khá dễ dàng, nhưng cách tôi có thể sử dụng để xây dựng hai phiên bản ứng dụng có và không có quảng cáo. Và làm thế nào tôi có thể thay đổi tên gói bằng cách sử dụng kiến, vì vậy android market sẽ chấp nhận cả hai gói (đầy đủ và Lite).


Cảm ơn bạn đã đề xuất nhưng tôi vẫn gặp một số vấn đề.

Tôi đã viết một số mục tiêu cơ bản để dọn dẹp bản dựng và sao chép tất cả các tệp cần thiết để xây dựng ứng dụng trong hai thư mục/đầy đủ và/lite. Vì vậy, tôi có hai thư mục với cùng một nội dung. Bây giờ tôi đổi tên tất cả các trận đấu của tên gói ứng dụng trong tất cả các tệp * .java và tệp AndroidManifest (chuẩn bị đích).

Để thực sự tạo hai phiên bản khác nhau, giờ đây tôi sẽ phải bao gồm mã từ bài đăng đầu tiên của mình. Nhưng làm thế nào để tôi phải làm điều này và làm thế nào tôi có thể xây dựng cả hai phiên bản trong mục tiêu phát hành và viết các tập tin * .apk kết quả vào directoy xây dựng?

Cuối cùng ... Đó có phải là tất cả những gì tôi phải làm để xây dựng các tệp * .apks có thể được thị trường Android chấp nhận không?

<?xml version="1.0" encoding="UTF-8"?> 
<project name="my.application" default="help" basedir="."> 
    <!-- Load the custom property files --> 
    <property file="build.properties" /> 
    <property file="passwords.properties" /> 

    <!-- Set global properties for this build --> 
    <property name="my.application.pkg" value="my.application"/> 
    <property name="my.application.pkg.full" value="my.application.full"/> 
    <property name="my.application.pkg.lite" value="my.application.lite"/> 

    <property name="my.application" location="."/> 
    <property name="my.application.build" location="build"/> 
    <property name="my.application.src" location="src"/> 
    <property name="my.application.res" location="res"/> 
    <property name="my.application.gen" location="gen"/> 

    <property name="my.application.full" location="full"/> 
    <property name="my.application.full.src" location="full/src"/> 
    <property name="my.application.full.res" location="full/res"/> 
    <property name="my.application.full.gen" location="full/gen"/> 
    <property name="my.application.full.build" location="full/build"/> 

    <property name="my.application.lite" location="lite"/> 
    <property name="my.application.lite.build" location="lite/build"/> 
    <property name="my.application.lite.src" location="lite/src"/> 
    <property name="my.application.lite.res" location="lite/res"/> 
    <property name="my.application.lite.gen" location="lite/gen"/> 

    <!-- Create and update the local.properties file --> 
    <loadproperties srcFile="local.properties" /> 

    <!-- Load the ant.properties file --> 
    <property file="ant.properties" /> 

    <!-- Load the project.properties file --> 
    <loadproperties srcFile="project.properties" /> 

    <!-- Quick check on sdk.dir. --> 
    <fail 
     message="sdk.dir is missing." 
     unless="sdk.dir" /> 

    <!-- Version-tag: 1 --> 
    <import file="${sdk.dir}/tools/ant/build.xml" /> 

    <target name="release" depends="report, prepare"> 
     <echo>Building the target!</echo> 
    </target> 

    <target name="prepare" depends="cleanup" > 
     <!-- Copy the Manifest.xml to the full copy --> 
     <copyfile src="${my.application}/AndroidManifest.xml" 
      dest="${my.application.full}/AndroidManifest.xml" /> 

     <!-- Copy the source files to the full copy --> 
     <copy todir="${my.application.full.src}" overwrite="true"> 
      <fileset dir="${my.application.src}" /> 
     </copy> 

     <!-- Copy the resources to the full copy --> 
     <copy todir="${my.application.full.res}" overwrite="true"> 
      <fileset dir="${my.application.res}" /> 
     </copy> 

     <!-- Copy the generated to the full copy --> 
     <copy todir="${my.application.full.gen}" overwrite="true"> 
      <fileset dir="${my.application.gen}" /> 
     </copy> 

     <!-- Replace the package name in the full manifest file --> 
     <replaceregexp file="${my.application.full}/AndroidManifest.xml" 
      match='package="(.*)"' 
      replace='package="${my.application.pkg.full}"' 
      byline="false" /> 

     <!-- Change the package name in all Java files --> 
     <replaceregexp flags="g" byline="false"> 
      <regexp pattern="${my.application.pkg}" /> 
      <substitution expression="${my.application.pkg.full}" /> 
      <fileset dir="${my.application.full.src}" includes="**/*.java" /> 
     </replaceregexp> 

     <!-- Copy the Manifest.xml to the lite copy --> 
     <copyfile src="${my.application}/AndroidManifest.xml" 
      dest="${my.application.lite}/AndroidManifest.xml" /> 

     <!-- Copy the source files to the lite copy --> 
     <copy todir="${my.application.lite.src}" overwrite="true"> 
      <fileset dir="${my.application.src}" /> 
     </copy> 

     <!-- Copy the resources to the lite copy --> 
     <copy todir="${my.application.lite.res}" overwrite="true"> 
      <fileset dir="${my.application.res}" /> 
     </copy> 

     <!-- Copy the generated to the lite copy --> 
     <copy todir="${my.application.lite.gen}" overwrite="true"> 
      <fileset dir="${my.application.gen}" /> 
     </copy> 

     <!-- Replace the package name in the lite manifest file --> 
     <replaceregexp file="${my.application.lite}/AndroidManifest.xml" 
      match='package="(.*)"' 
      replace='package="${my.application.pkg.lite}"' 
      byline="false" /> 

     <!-- Change the package name in all Java files --> 
     <replaceregexp flags="g" byline="false"> 
      <regexp pattern="${my.application.pkg}" /> 
      <substitution expression="${my.application.pkg.lite}" /> 
      <fileset dir="${my.application.lite.src}" includes="**/*.java" /> 
     </replaceregexp> 
    </target> 

    <!-- Deletes all directories, not needed anymore after compiling the source files --> 
    <target name="cleanup"> 
     <!-- Delete the full version build dir --> 
     <delete dir="${my.application.full}"/> 
     <!-- Delete the lite version build dir --> 
     <delete dir="${my.application.lite}"/> 
     <!-- Delete the *.apk file --> 
     <delete file="my.application.full.apk"/> 
     <!-- Delete the *.apk file --> 
     <delete file="my.application.lite.apk"/> 
    </target> 
</project> 
+0

Bạn có tìm thấy giải pháp nào không? Tôi bị mắc kẹt trên cùng một vấn đề. Bạn vui lòng chia sẻ nếu bạn sửa lỗi này? – Mac

+0

Không thực sự. Tôi đã triển khai chương trình mà không cần phiên bản nhẹ. Nhưng tôi rất sẵn lòng tìm ra giải pháp làm việc. – Phidelux

Trả lời

3

Có một số cách để bạn có thể đạt được những gì bạn yêu cầu.

Dưới đây là một vài ý tưởng mà tôi đã sử dụng trong quá khứ,

1) Có hai ứng dụng 'đứng đầu' mà kéo trong một thư viện Android thông thường. Mỗi đầu khởi tạo dữ liệu tĩnh để thiết lập thư viện hoạt động như phiên bản lite hoặc phiên bản đầy đủ của ứng dụng của bạn. Điều này có lợi thế là bạn có thể thực hiện việc xây dựng từ các dự án Eclipse cũng như với Ant.

2) Có hai mục tiêu xây dựng riêng biệt chia sẻ mục tiêu xây dựng chung để tạo hai tệp APK riêng biệt. Trong kịch bản xây dựng Ant có nó xây dựng hai phiên bản của APK. Một là phiên bản đầy đủ và phiên bản khác xây dựng phiên bản lite. Sự khác biệt giữa hai mục tiêu là chúng xây dựng bằng cách sử dụng các tệp hơi khác nhau (bằng cách sao chép, chuyển hướng đến các thư mục khác nhau hoặc sửa đổi với tập lệnh).

Tất cả điều này có thể được thực hiện trong Ant bằng cách sử dụng các mục tiêu và thuộc tính.

Nếu ở cấp cao nhất của bản dựng, bạn có mục tiêu phát hành tùy thuộc vào hai mục tiêu khác.

ví dụ:

<target name="release" 
    depends="release-Full, release-Lite"> 
</target> 

<target name="release-Full"> 
    <ant antfile="thisbuild.xml" inheritAll="true" target="full"> 
    <property name="MyCustomProperty" value="Full" /> 
    </ant> 
</target> 



<target name="release-Lite"> 
    <ant antfile="thisbuild.xml" inheritAll="true" target="lite"> 
    <property name="MyCustomProperty" value="Lite" /> 
    </ant> 
</target> 

Sau đó, bạn có thể sử dụng các mục tiêu và thuộc tính này để sửa đổi bản dựng của mình để làm bất cứ điều gì bạn yêu cầu để xây dựng từng tệp APK.

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