有时候提供的jar需要内嵌到第三方app,但是本身又使用到layout,drawable,string等资源,就需要用到动态获取资源id。
比如原先我们设置页面是这样的
setContentView(R.layout.main);
现在需要改成这样:
Utils.setPackageName(getPackageName());
Utils.setContext(getApplicationContext());
setContentView(Utils.getResourceId(Utils.packageName, "layout",
"chinapay_main"));
public static Context mContext = null;
public static void setContext(Context context) {
mContext=context;
}
public static int getResourceId(String packageName, String typeName,
String instenceName) {
if (packageName != null && typeName != null && instenceName != null) {
try {
//反射这种方式大部分商户可以
// Class> cl = Class.forName(packageName + "$" + typeName);
// Field field = cl.getField(instenceName);
// return field.getInt(cl);
//20211026 某商户表示R做了内联,以上方法,无法找到资源,要求改用getResources方式
return mContext.getResources().getIdentifier(instenceName,typeName,packageName);
} catch (Exception e) {
e.printStackTrace();
}
}
return -1;
}



