使用AS将项目打包成aar供其他项目使用

时间:2022-04-05 09:38:50

前言:

使用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.

使用AS将项目打包成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文件

使用AS将项目打包成aar供其他项目使用


3.如何使用aar

3.1将aar放在你所需要引用工程的libs文件夹中。

使用AS将项目打包成aar供其他项目使用


3.2在project的build.gradle文件中添加

repositories {
    flatDir {
        dirs 'libs' 
    }
}

注意,是project的不是module的build.gradle文件,下图是添加前后的对比。


使用AS将项目打包成aar供其他项目使用

使用AS将项目打包成aar供其他项目使用

3.3然后再在module的build.gradle文件中dependencies标签中添加下面的依赖。 compile(name:'你的aar名字', ext:'aar')


使用AS将项目打包成aar供其他项目使用


3.4在项目中配置需要使用aar中的组建(Activity/Service.....)

使用AS将项目打包成aar供其他项目使用

代码调用:

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