Android ANTはJarとAPKをどのようにコンパイルしますか?

22409 ワード

最近AndroidのAntコンパイル環境を研究し、経験をまとめて書きました.eclipseでandroidのプロジェクトをコンパイルできることはよく知られていますが、どうやって完成したのでしょうか.主にADTプラグインがandroidを呼び出すbuild toolsによって完了した.実はeclipseのコンパイルもAntスクリプトでコンパイルされています./adnroid-sdk/tools/ant/build.xmlこれがADTプラグイン呼び出しのantスクリプトであり,このスクリプトを実行することでandroidエンジニアリングのコンパイルを完了することができる.
では、ADTプラグインに依存しなければ、androidエンジニアリングのコンパイルを完了することができますか?もちろん、まずApache Antをインストールする必要があります.現在の最新バージョンは1.9.4です.android sdkディレクトリの下にダウンロードして解凍し、binパスを環境変数PATHに追加します.最後にandroidエンジニアリングディレクトリの下でbuildを書くだけです.xmlファイル.
1.Jarファイルをどのようにコンパイルして、何も言わないで、直接コードに行きます
次に、コンパイルスクリプトbuildを示します.shファイル、最終的にbuildが呼び出されます.xmlファイル.local.propertiesファイルはAntが自動的に生成し、sdkが自動的に指定されます.dir変数、また手動でmeを指定しました.バージョン、コンパイルされたバージョン番号を指定します.
#!/bin/bash

PROP_FILE=local.properties
PROP_VERSION_KEY=me.version
VERSION=`cat ${PROP_FILE} | grep ${PROP_VERSION_KEY} | cut -d'=' -f2`
GITSHA1=`git log |  sed -n '1p' | awk  '{print $2}'`
MTL_OUTPUT=target

echo '
###################################################
#
#        Android Build system
#
###################################################
'
#   android sdk  
android update project -p .
#1.  jni
ndk-build clean
ndk-build

#2.  jar
ant -f build.xml

echo '
#################################################
#
#  Make the tar package 
#
#################################################
'
tar -cvf ${MTL_OUTPUT}/aliroot_${VERSION}_${GITSHA1}.tar.gz sdk

local.propertiesファイル:
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.

# location of the SDK. This is only used by Ant
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=/Users/mars/development/AndroidSDK/sdk
me.version=1.1.0

build.xmlファイル:

    
    
      

      
     
      
      
    
    
      
    
    
     
      
    
    
      
      
    
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    

      
      
    
    
    
    
    
    
    
    
        
        
           
             
        
    

    
    
        
        
        
        
        
        
        
        
        
         
          

                
                
                
             
    

      
    
        Compiling .aidl into java files...  
          
              
              
              
              
              
            
              
              
                  
            
          
     
    
    
    
        Compiling java source code...  
        
              
            
            
            
        
    

    
    
        
            
        
        
            
        
        
        
            
                
                    
                    
                    
                    
                
            
            
         

        
        
            
                
                
            
        
        
        
        
    
    
    
    
        Start proguard obfuscate...  
        
        
        
        
            -injar ${classes.obj.bin.dir}/${jarname}
            -outjar ${output.dir}/${obfuscate.jarname}
            -libraryjar ${android-jar}
            -libraryjar ${libs.dir}/securityguard-2.3.39.jar
            -libraryjar ${libs.dir}/umid-1.3.0.jar
        
        
        
            
    
    

proguard-project.txtファイル:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
#-dontwarn
-verbose
-optimizations !code/simplification/arithmetic,!class/merging/*
-keepattributes InnerClasses,Exceptions

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native ;
}

-keepclasseswithmembers class * {
    public (android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public (android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keep interface com.xxx.zzz{public *;}
-keep class com.yyy.JNIHelper
-keepclassmembers class com.yyy.JNIHelper{public *;}

プロジェクトでpropertiesファイルでproguardを指定します.config. 次はプロジェクトです.propertiesファイル:
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-19
android.library=false
proguard.config=proguard-project.txt

2.APKファイルのコンパイル方法:build.sh,local.propertiesファイルはすべて上と同じです.buildを変更するだけです.xmlファイル:


    
      
    
    
    
      
      
    
    
    
    
    
    
    

    
    
    
    
    
    
    
    
    

    
    
    
    
    
    
    
    
    
    
    
    
    
    
      
    
     

    
    
    
    
    

    
    

    
    
    
    

    
    
      
      
      
      
     


    
    
        Creating all output directories 
        
        
        
        
        
        
         
        

            
            
            
        
    
 
    
    
        Generating R.java / Manifest.java from the resources...
        
            
            
            
            
            
            
            
            
            
            
        
    

    
    
        Compiling aidl files into Java classes...
        
            
            
            
                
            
        
    

    
    
        Compiling java source code...  
        
            
            
            
            
                
            
        
    


    
    
        Converting compiled files and external libraries into ${outdir-bin}/${dex-file}...
        
            
            
            
            
        
    

    
    
        Packaging resources and assets...
        
            
            
            
            
            
            
            
            
            
            
            
            
        
    

    
    

     
    
          
              
              
              
              
            
              
                
               
              
             
              
              
            
        
    
        
    
        jarsigner ${out-unsigned-package} for release...
        
            
            
            
            
            
            
            
            
            
            
            
        
    

    
        jarsigner for release succefully...