1、在开发SDK的过程中会发现通常是以jar和资源结合。而资源是提供给外部接入方使用的,在调用的时候为了防止编译的错误,要么使用反射,要么将资源放到jar工程当前,只是最后打包的时候不打资源包,将资源外放。这里提供下使用反射在sdk中调用外部资源的方法。
2、ReflectResourcesUtil类。调用前先调用init方法,当然如果你不想调用的话我也有备用的初始化方法,使用反射获取当前应用的Application来进行初始化。
import android.app.Application;
import android.content.Context;
import android.content.res.Resources;
import android.text.TextUtils;
import android.util.Log;
import java.lang.reflect.Method;
public class ReflectResourcesUtil {
private static final String TAG = "ReflectResourcesUtil";
private static String mPackageName;
private static Resources mResources;
/**
* 先调用初始化,然后再调用其他方法
*
* @param context
*/
public static void init(Context context) {
mPackageName = context.getApplicationContext().getPackageName();
mResources = context.getApplicationContext().getResources();
}
/**
* 防止没有调用初始化,使用备用初始化方法
*/
private static void retryInit() {
if (!TextUtils.isEmpty(mPackageName) || mResources != null) {
//已经初始化过,无需要再初始化
return;
}
Application application = getCurApplication();
if (application == null)
return;
init(application.getApplicationContext());
}
public static int getLayout(String resName) {
retryInit();
if (mResources == null || TextUtils.isEmpty(mPackageName)) {
return -1;
}
return mResources.getIdentifier(resName, "layout", mPackageName);
}
public static int getDrawable(String resName) {