Android打包SDK供第三方调用

创建库工程

新建一个android工程,并创建一个LibActivity
LibActivity代码如下:
</pre><pre name="code" class="java">package test.lib.activity;

import com.example.libproject.R;
import android.app.Activity;
import android.os.Bundle;

public class LibActivity extends Activity {


		@Override
		protected void onCreate(Bundle savedInstanceState) {
			setContentView(R.layout.lib);
			super.onCreate(savedInstanceState);
		}
}
布局文件如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="60dip"
        android:layout_centerInParent="true"
        android:textSize="20sp"
        android:textColor="#868"
        android:gravity="center"
        android:textStyle="bold"
        android:text="这是LibProject中的Layout"/>
</RelativeLayout>
工程文件结构如下:

目前已经生成一个简单的Android工程,但我们需要的是一个LibProject,所以需要通过在项目上右键选择Properties(Alt+Enter)设置一下该项目是一个library项目





关于资源文件不能打包的问题

因为资源文件被打到jar里是不能被程序找到的,而且在把源码打成jar包时,调用R文件得到的id,如R.layout.lib,这个id将会以一个固定的值被嵌入代码中。所以别的工程引用我们的jar的时候会出现资源找不到的情况(即使你把资源文件copy到工程res目录)。

解决办法:新建一个类,名为Res,代码如下:
<pre name="code" class="java">package test.lib.activity.lib;

import com.example.libproject.R;

public class Res {

    public static final class layout {
        public static int lib(){
        	return R.layout.lib;
        }
    }
}

该类定义一些方法用于获取资源文件的id,直接返回R文件中资源文件的id,方法名为资源文件的名称。
修改LibActivity中通过R文件获取资源文件ID的地方为Res类中的方法,修改后代码如下:
package test.lib.activity;

import android.app.Activity;
import android.os.Bundle;

public class LibActivity extends Activity {

		@Override
		protected void onCreate(Bundle savedInstanceState) {
			//修改
			setContentView(Res.layout.lib());
			super.onCreate(savedInstanceState);
		}
}

把源码打成jar包

在工程的src目录上右键选择Export——Java——JAR file


注意:在打包时,Res类不需要打到jar包里,这里是把Res类放在test.lib.activity.lib目录下,所以打包时把test.lib.activity.lib包前面的勾去掉
在JAR file选项设置一下jar文件存放路径,点击finish,最后可以在指定的目录下找到自己生成的jar文件

最后把jar包放到LibProject的res/libs目录下,然后把除了Res类的其它类文件都删除(这步可选,如果你不想把你的源码公开的话,或者出于安全考虑)


第三方应用调用SDK

第三方应用调用你的SDK时,只需要把你的LibProject导入到自己的工作空间,并引用你的LibProject,然后在清单文件配置相关的组件和权限即可。

引用LibProject

调用代码:
package test.lib;

import test.lib.activity.LibActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import com.example.libtest.R;

public class TestActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		setContentView(R.layout.test);
		super.onCreate(savedInstanceState);
	}
	
	public void click(View view) {
		//点击按钮跳转到LibProject中的LibActivity
		startActivity(new Intent(this, LibActivity.class));
	}
}




效果图:



源码下载


posted on 2014-05-30 19:29  linchaolong  阅读(12301)  评论(1编辑  收藏  举报

导航