版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a396604593/article/details/79930192
开发背景
之前有一个需求,对接过程中,要引入其他模块大量资源,但是本身项目中并不像加入res。
在百度了一番之后,收到一些启发。
通过资源名称获取对应的资源。
楼主大胆假设了一下,是不是只要 替换了context是其他apk的context 就能获取到 另一个apk中的资源。
随后在和对接小伙伴一起努力中终于在我的项目中拿到了他项目中的res资源
步骤如下:
1、构造目标项目的context
public static void initContext(Context context) {
try {
fileContext = context.createPackageContext("com.gome.filer", 3);//字符串为目标项目包名
} catch (NameNotFoundException var2) {
var2.printStackTrace();
}
}
2、根据构造好的context和文件名获取对应的资源
int ret = CPResourceUtil.getDrawableId(fileContext, "file_unknown");//字符串为目标资源名
3、根据资源名称获取资源的工具类
import android.content.Context;
public class CPResourceUtil {
public CPResourceUtil() {
}
public static int getLayoutId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString, "layout", paramContext.getPackageName());
}
public static int getStringId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString, "string", paramContext.getPackageName());
}
public static int getDrawableId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString, "drawable", paramContext.getPackageName());
}
public static int getStyleId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString, "style", paramContext.getPackageName());
}
public static int getId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString, "id", paramContext.getPackageName());
}
public static int getColorId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString, "color", paramContext.getPackageName());
}
public static int getArrayId(Context paramContext, String paramString) {
return paramContext.getResources().getIdentifier(paramString, "array", paramContext.getPackageName());
}
}
尾注:
小小技巧略作记录