Android中以JAR形式封装控件或者类库

23 阅读2分钟

2删除AndroidManifest.xml中资源的引用

类似这样的代码android:icon="@drawable/icon" android:label="@string/app_name"

其实AndroidManifest在我们发布jar的时候并不发布,之所以这样做不过是为了编译时好看而已。

view plain copy to clipboard print ?

  1.   
  2. <manifest xmlns:android="schemas.android.com/apk/res/and…"  

  3.       package="MyAndroid.Widget"  

  4.       android:versionCode="1"  

  5.       android:versionName="1.0">  

  6. </manifest>   

3建立自己的Java控件

view plain copy to clipboard print ?

  1. package MyAndroid.Widget;  

  2. import java.io.InputStream;  

  3. import java.net.URL;  

  4. import android.content.Context;  

  5. import android.content.res.AssetManager;  

  6. import android.util.AttributeSet;  

  7. import android.view.View;  

  8. import android.graphics.Bitmap;  

  9. import android.graphics.BitmapFactory;  

  10. import android.graphics.Canvas;  

  11. import android.graphics.Color;  

  12. import android.graphics.Paint;  

  13. import android.graphics.Rect;  

  14. public class MyView extends View {  

  15.     public MyView(Context context) {  

  16.         super(context);  

  17.         // TODO Auto-generated constructor stub   

  18.     }  

  19.     public MyView(Context context, AttributeSet attrs) {  

  20.         super(context, attrs);  

  21.         // TODO Auto-generated constructor stub   

  22.     }  

  23.     public MyView(Context context, AttributeSet attrs, int defStyle) {  

  24.         super(context, attrs, defStyle);  

  25.         // TODO Auto-generated constructor stub   

  26.     }  

  27.     @Override  

  28.     protected void onDraw(Canvas canvas) {  

  29.         // TODO Auto-generated method stub   

  30.         super.onDraw(canvas);  

  31.         canvas.drawColor(Color.GRAY);  

  32.         Paint paint=new Paint();  

  33.         paint.setAntiAlias(true);  

  34.         paint.setColor(Color.RED);  

  35.         canvas.drawRect(new Rect(10,10,20,20), paint);  

  36.         Bitmap bgImg = getImageFromAssetFile("png-040.png");   

  37.         canvas.drawBitmap(bgImg, 20, 20, null);  

  38.     }  

  39.      private Bitmap getImageFromAssetFile(String fileName){    

  40.              Bitmap image = null;    

  41.              try{    

  42.                  AssetManager am = getContext().getAssets();    

  43.                  InputStream is = am.open(fileName);    

  44.                  image = BitmapFactory.decodeStream(is);    

  45.                  is.close();    

  46.              }catch(Exception e){    

  47.              }    

  48.              return image;    

  49.          }   

  50. }  

package MyAndroid.Widget; import java.io.InputStream; import java.net.URL; import android.content.Context; import android.content.res.AssetManager; import android.util.AttributeSet; import android.view.View; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; public class MyView extends View { public MyView(Context context) { super(context); // TODO Auto-generated constructor stub } public MyView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public MyView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawColor(Color.GRAY); Paint paint=new Paint(); paint.setAntiAlias(true); paint.setColor(Color.RED); canvas.drawRect(new Rect(10,10,20,20), paint); Bitmap bgImg = getImageFromAssetFile("png-040.png"); canvas.drawBitmap(bgImg, 20, 20, null); } private Bitmap getImageFromAssetFile(String fileName){ Bitmap image = null; try{ AssetManager am = getContext().getAssets(); InputStream is = am.open(fileName); image = BitmapFactory.decodeStream(is); is.close(); }catch(Exception e){ } return image; } }

注意 如果要在jar中封装自己的资源,要把资源放入assets目录中

我的demo包中我打入了一个png图片,资源的名字不能和工程中的资源名字重复。

4 在 Package Explorer Panel的工程名上 点击右键,选择 Export

Java-> JAR file 点下一步

去掉.classpath, .project, AndroidManifest.xlm, default.properties上的选择

输入 Jar的输出路径 点Finish

最后

考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档,如果有需要的朋友可以私信我【面试】免费领取

点击这里领取Android面试资料汇总

喜欢的朋友可以关注、转发、点赞 感谢!