将公共组件或常用工具类创建一个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如何使用?
- 创建一个普通的anroid工程,LibTest,步骤同上,不用选择library:
- 项目上点右键-android,右边拖到最下面,add刚才的library工程,确定,就继承成功。
- 在此可以引用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里的资源进行重命名。