将公共组件或常用工具类创建一个Library工程供多个项目共享使用,这是我们在开发久了所总结出来的经验,当然网上也有很多开源项目也是类似的模式和用法。

本文着重介绍如何创建Android library,并且在工程中使用此library提供的资源,具体步骤如下:

1.创建Android library工程

a.应用名成

b.项目名称

c.包名:由于编译后,Library和引用它的project是合并在一起的,为了区分明显、使用方便,建议这里包名进行修改

d.最小SDK指向

e.目标sdk指向

 这里的设置会在AndroidManifest.xml里进行配置

f.编译sdk指向

这里的设置会在project.properties里进行配置 

g.主题:这里选择不使用任何主题

2.将工程设置为 Library

a.由于是library工程,所以这里不选择创建icon图标

b.选择mark this project as a library ,选择此项,会将此工程配置为library工程。

  ( 我这里选择之后,没有成功,不知道啥原因,通过project.properties可以看出是否成功.)

 如果成功,将出现如下配置: 

 如果这里没有出现此配置,那么可以通过在项目上右键-properties,点击左边Android,右边拖动滚动条到最下面,选择Is Library ,确定则配置成功:

此处的appcompat_V7是选择4.0以上SDK会自动继承的,这里不需要可以删除。

删除之后style.xml会报错,可以直接删除style.xml ,由于我这里不需要,同时删除,values-v11 ,values-v14 ,menu文件夹也删除。(根据自己需求进行处理)

library工程的AndroidManifest.xml不需要 application,如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.lllll"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.lllll"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

</manifest>

3.创建默认activity类,选择相应的模板,当然也可以不创建,这里根据需求情况。

4.创建默认activity及布局文件

删除V7之后,默认这个类会报错,通过修改如下:

package com.example.lllll;
  
import com.example.lllll.R;
import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends  Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
package com.example.lllll;
  
import com.example.lllll.R;
import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends  Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

创建好Library如何使用?

  1. 创建一个普通的anroid工程,LibTest,步骤同上,不用选择library:
  2. 项目上点右键-android,右边拖到最下面,add刚才的library工程,确定,就继承成功。
  3. 在此可以引用Library里的类
package com.example.libtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class MainActivity extends  Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        TextView t = (TextView) findViewById(R.id.test);
        t.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,levent.snail.core.MainActivity.class);
                startActivity(intent);
            }
        });
    }
 
}
package com.example.libtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class MainActivity extends  Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        TextView t = (TextView) findViewById(R.id.test);
        t.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,levent.snail.core.MainActivity.class);
                startActivity(intent);
            }
        });
    }
 
}

这里注意调用Library里的activity一定先要在当前工程里引用activity,否则会出现notfoundactivity,

<activity   android:name="levent.snail.core.MainActivity"  >      </activity>
 <activity   android:name="levent.snail.core.MainActivity"  >      </activity>

注意:SDK在编译时候,会把Library和引用它的project进行合并,为了避免重名引起的问题,需要对library里的资源进行重命名。