2011-02-28 13 views
7

eklenti hala Android Eclipse ADT kullanırken derleme işlemi özelleştirmek isteyen yüklü eklenti ADT, aşağıdaki inşaatçılar bir Android projesi için aktiftir:Ben ile

  • Android Kaynağı Yöneticisi
  • Android Öncesi Derleyici
  • Java Builder
  • Android Paket Oluşturucu

çıkış dizinine baktığımızda, followi ng eserler oluşturulur:

  • resources.ap_ (sadece kaynaklarla APK/ZIP ve hiçbir kodu)
  • gen/R.java (kaynakların otomatik olarak oluşturulan liste) java bayt
  • ile
  • .class dosyaları
  • classes.dex
  • $ {proje adı} Ben yapı proces sıkı kontrolünü birkaç kod eserler autogenerate ve genel ihtiyaç, benim proje için

.apk s. İlk önce Kaynak Yöneticisi'nin resource.ap_ yaratılmasından sorumlu olduğunu, ön derleyicinin R.java'yı oluşturduğunu, java oluşturucunun açık olduğunu ve daha sonra Android Package Builder'ın class.dex'i oluşturduğunu, ardından classes.dex ve resources.ap_ komutlarını oluşturduğunu düşündüm. APK dosyasını oluşturmak için

İlk iki adımı devre dışı bıraktım ve resources.ap_ dosyasının bir kopyasını oluşturan özel bir ön oluşturucu oluşturdum ve bunun eşdeğer olduğunu belirtti. Böyle bir şans yok.

Maalesef, son Android Package Builder, kaynakları doğrudan res/sl'den temizliyor ve resources.ap_ öğesini yoksayar. Aslında, ilk iki inşa adımı R.java'yı üretmekten başka bir şey yapma gibi görünmüyor.

Gerçekten sorunlu olan yer burasıdır.

[2011-02-27 20:25:28 - android-premium] ------------------------------ 
[2011-02-27 20:25:28 - android-premium] Android Launch! 
[2011-02-27 20:25:28 - android-premium] adb is running normally. 
[2011-02-27 20:25:28 - android-premium] Could not find android-premium.apk! 

yüzden şaşırıp: Final yapı adım devre dışı bırakmak ve (tam aynı adı taşıyan) Kendi APK dosyası uzandı, ben aşağıdaki hatayı alıyorum (Android Paket Builder ile hangi ayırt edilebilir bir konfigürasyona sahip değildir), ./res/ dosyalarını bireysel olarak temin etmeliyim. Bu olmadan, projeyi aygıtta başlatmaya alamıyorum (Eclipse'den değil).

Bu alanda daha iyi bir fikri/deneyimi olan var mı?

cevap

12

Karınca komut dosyaları ile ilgili olarak, Android uygulaması oluşturmak için Ant adımlarının hepsi bir arada şablonum aşağıdadır (bu, Eclipse yapısını Ant'e çevirmeyi çok daha kolay ve daha şeffaf olduğu için yararlı olabilir. android araçlarla otomatik olarak oluşturulan opak sürümü) daha:

<property name="workspace.dir" value="/workspace" /> 
<property name="project.dir" location="." /> 
<property name="android-platform.name" value="android-1.5" /> 


<!-- Framework Paths --> 
<property name="android-sdk.dir" value="${workspace.dir}/EpicFramework/android-sdk"/> 
<property name="android-tools.dir" value="${android-sdk.dir}/tools" /> 
<property name="android-platform.dir" value="${android-sdk.dir}/platforms/${android-platform.name}" /> 
<property name="android-platform-tools.dir" value="${android-platform.dir}/tools"/> 
<property name="android-platform-jar" value="${android-platform.dir}/android.jar"/> 
<property name="android-framework-src.dir" value="${workspace.dir}/EpicFramework/EpicAndroid"/> 

<!-- Tool Binaries --> 
<property name="adb" value="${android-tools.dir}/adb"/> 
<property name="apkbuilder" value="${android-tools.dir}/apkbuilder"/> 
<property name="aapt" value="${android-platform-tools.dir}/aapt"/> 
<property name="dx" value="${android-platform-tools.dir}/dx"/> 

<!-- Project Paths --> 
<property name="src.dir" value="${project.dir}/src" /> 
<property name="gen.dir" value="${project.dir}/gen" /> 
<property name="res.dir" value="${project.dir}/res" /> 
<property name="lib.dir" value="${project.dir}/lib" /> 
<property name="build.dir" value="${project.dir}/bin" /> 
<property name="build.classes.dir" value="${build.dir}/classes" /> 

<property name="resources.file" value="${build.dir}/resources.ap_"/> 
<property name="dex.file" value="${build.dir}/classes.dex" /> 
<property name="debug-apk.file" value="${build.dir}/${ant.project.name}-debug.apk"/> 


<target name="dirs"> 
    <echo>Creating output directories if needed...</echo> 
    <mkdir dir="${res.dir}" /> 
    <mkdir dir="${gen.dir}" /> 
    <mkdir dir="${lib.dir}" /> 
    <mkdir dir="${build.dir}" /> 
    <mkdir dir="${build.classes.dir}" /> 
</target> 

<target name="android-resource-src" depends="dirs"> 
    <echo>Generating R.java from the resources...</echo> 
    <exec executable="${aapt}" failonerror="true"> 
     <arg value="package" /> 
     <arg value="-M" /> 
     <arg path="AndroidManifest.xml" /> 
     <arg value="-S" /> 
     <arg path="${res.dir}" /> 
     <arg value="-I" /> 
     <arg path="${android-platform-jar}" /> 
     <arg value="-m" /> 
     <arg value="-J" /> 
     <arg path="${gen.dir}" /> 
    </exec> 
</target> 

<target name="android-compile" depends="android-resource-src"> 
    <echo>Compiling java files into class files...</echo> 
    <javac 
     encoding="ascii" 
     target="1.5" 
     debug="true" 
     extdirs="" 
     destdir="${build.classes.dir}" 
     includeAntRuntime="false" 
     bootclasspath="${android-platform-jar}"> 
     <src path="${android-framework-src.dir}" /> 
     <src path="${src.dir}" /> 
     <src path="${gen.dir}" /> 
     <classpath> 
      <fileset dir="${lib.dir}" includes="*.jar"/> 
     </classpath> 
    </javac> 
</target> 

<target name="android-dex" depends="android-compile"> 
    <echo>Converting compiled files and 3rd party libraries into ${dex.file} ...</echo> 
    <apply executable="${dx}" failonerror="true" parallel="true"> 
     <arg value="--dex" /> 
     <arg value="--output=${dex.file}" /> 
     <arg path="${build.classes.dir}" /> 
     <fileset dir="${lib.dir}" includes="*.jar"/> 
    </apply> 
</target> 

<target name="android-package-resources"> 
    <echo>Packaging Android resources into ${resources.file} ...</echo> 
    <exec executable="${aapt}" failonerror="true"> 
     <arg value="package" /> 
     <arg value="-M" /> 
     <arg path="AndroidManifest.xml" /> 
     <arg value="-S" /> 
     <arg path="./res" /> 
     <arg value="-I" /> 
     <arg path="${android-platform-jar}" /> 
     <arg value="-f" /> 
     <arg value="-F" /> 
     <arg value="${resources.file}" /> 
    </exec> 
</target> 

<target name="android-debug" depends="android-dex, android-package-resources"> 
    <echo>Packaging app and signing it with the debug key</echo> 
    <exec executable="${apkbuilder}" failonerror="true"> 
     <arg value="${debug-apk.file}" /> 
     <arg value="-d" /> 
     <arg value="-z" /> 
     <arg value="${resources.file}/" /> 
     <arg value="-f" /> 
     <arg value="${dex.file}" /> 
    </exec> 
</target> 

<target name="android-release" depends="android-dex, android-package-resources"> 
    <echo>Packaging App without signing, so that it can be signed with the official publishing key ...</echo> 
    <exec executable="${apkbuilder}" failonerror="true"> 
     <arg value="${release-apk.file}" /> 
     <arg value="-u" /> 
     <arg value="-d" /> 
     <arg value="-z" /> 
     <arg value="${resources.file}/" /> 
     <arg value="-f" /> 
     <arg value="${dex.file}" /> 
    </exec> 
    <echo>All generated packages need to be signed with jarsigner before they are published.</echo> 
</target> 

<target name="android-install" depends="android-debug"> 
    <echo>Removing all com.epicapplications APK files from default emulator ...</echo> 
    <exec executable="${adb}" inputstring="echo hi; rm -f /data/app/com.epicapplications.*; exit; 
    "> 
     <arg value="shell"/> 
    </exec> 
    <echo>Installing ${debug-apk.file} onto default emulator...</echo> 
    <exec executable="${adb}" failonerror="true"> 
     <arg value="install" /> 
     <arg value="-r" /> 
     <arg path="${debug-apk.file}" /> 
    </exec> 
</target> 

ı Aradıklarım hala bu Ant yapı komut dosyası tamamını veya parçalarını kullanabilmek için, ama olmaktır Uygulamayı başlatmak ve hata ayıklamak için Eclipse entegrasyonu var.

+15

Vay, ironi. Yeni bir proje hazırladım ve yapı senaryomu kazandım .... bu yüzden googled ..... ve bunu buldum ..... ve sadece dibe indiğimde bunu yazdığımı fark ettim . –

+0

Sadece android-dex hedefinizi yakalayıp düzenli dex hedefinin yerine koyarsam, bunu nasıl yaparım? – Mark

2

Android projeler için inşa işlemini yapmak için Ant komut dosyalarını kullandık, diğerleri de Maven'i kullandı. Bunlar, CI yapı sisteminizin bir parçası olarak, her gün, gece yapımının bir parçası olarak çalışacak şekilde onları komut dosyası olarak kullanmanıza yardımcı olabilir. İleri düzey bir sürümde, bu sürümün sürüm etiketleri, derleme ve derleme sonrası AndroidManifest.xml modifikasyonları ve imzalama ile birlikte yayınlanmasını sağlayabilirsiniz.

+1

Evet, komut satırından iyi çalışan bir Ant derleme betiğim var. Ancak, aradığım iş akışı: 1) Bir java dosyasında birkaç satırı değiştirin, 2) Çalıştır (CTL-Shift-F11), 3) Uygulama cihazda başlar. Ant'den her şeyi inşa etmek için iyi olurdum. Aslında, bir Ec script'in Eclipse'in yapı zincirine entegre edilmesi süper kolaydır. Sorun, ADT'nin son monolitik yapı adımını çalıştırmadan uygulamanızı başlatmayı reddetmesidir. –