前言:
使用eclipse开发android时候,如果需求将一个项目打包成jar以便其他项目调用,存在一个资源文(drawable/layout/values...)无法打包的弊端所以使用起来很不友好!
jar包即使包含了xml资源,在应用的时候也会报资源找不到的错误,为什么?因为在引用这个jar包的工程中,jar包中引用ID 指向的是当前项目的资源,目前也没有针对此的解决方法。aar包的出现,让打包资源简单化成了现实。但是如果你是eclipse工程,没办法引用aar包,那可以到这个博客中看看他是怎么解决的(http://blog.csdn.net/xiaanming/article/details/9257853)
如何打aar包:
1. 新建一个project,在project中新建一个module,选择Android jar,然后下一步下一步。新建之后你会看到在你的module里的build.gradle文件第一行apply plugin: 'com.android.library',它代表它是一个jar。然后运行Build,会在你工程目***\build\outputs\aar看到你的aar.
2.实现library中代码逻辑
简单实现了一下library中的MyActivity一个界面及点击事件:
public class MyActivity extends Activity implements View.OnClickListener { Button leftbt, rightbt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.test_view); initView(); } void initView() { leftbt = (Button) findViewById(R.id.leftbt); rightbt = (Button) findViewById(R.id.rightbt); leftbt.setOnClickListener(this); rightbt.setOnClickListener(this); } @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.leftbt) { Toast.makeText(MyActivity.this, "msg", Toast.LENGTH_SHORT).show(); } if (id == R.id.leftbt) { Toast.makeText(MyActivity.this, "setting", Toast.LENGTH_SHORT).show(); } } }
编译后在library的build—>outputs—>aar文件夹下生成对对应的library文件
3.如何使用aar
3.1将aar放在你所需要引用工程的libs文件夹中。
3.2在project的build.gradle文件中添加
repositories {
flatDir {
dirs 'libs'
}
}
注意,是project的不是module的build.gradle文件,下图是添加前后的对比。
3.3然后再在module的build.gradle文件中dependencies标签中添加下面的依赖。 compile(name:'你的aar名字', ext:'aar')
3.4在项目中配置需要使用aar中的组建(Activity/Service.....)
代码调用:
public class MainActivity extends Activity { Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { test(); } }); } private void test(){ Intent intent = new Intent(this, MyActivity.class); startActivity(intent); } }
原文:http://jingyan.baidu.com/article/ca2d939d0faed1eb6c31ced9.html