博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片,布局,string等)打进jar包
阅读量:6498 次
发布时间:2019-06-24

本文共 2200 字,大约阅读时间需要 7 分钟。

解决如下:由于打包出来的jar只有源代码的.class 文件,不包含资源文件,我们就把jar包中用到的资源放到你使用

该jar的工程里面。然后通过反射即可,这里给出反射类:

public class MResource {

public static int getIdByName(Context context, String className, String resName) {    String packageName = context.getPackageName();    int id = 0;    try {        Class r = Class.forName(packageName + ".R");        Class[] classes = r.getClasses();        Class desireClass = null;        for (Class cls : classes) {            if (cls.getName().split("\\$")[1].equals(className)) {                desireClass = cls;                break;            }        }        if (desireClass != null) {            id = desireClass.getField(resName).getInt(desireClass);        }    } catch (Exception e) {        e.printStackTrace();    }    return id;}

}

这里演示项目中打开jar中的activity的实例

这里给出jar中activity的代码:

public class JarActivity extends AppCompatActivity {

@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(MResource.getIdByName(this, "layout", "jar_layout"));    ImageView mPlayerLogo = (ImageView) this.findViewById(MResource.getIdByName(this,            "id", "logo"));    mPlayerLogo.setImageResource(MResource.getIdByName(this, "drawable", "ic_launcher"));}

}

**这里:利用反射根据资源名字获取资源ID加载布局+设置图片

在项目中打开jar的JarActivity的实现代码如下:

注:由于jar没有布局文件和资源文件,所以需要把布局(jar_layout)copy到项目中,aar则不需要**

public class MainActivity extends AppCompatActivity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    findViewById(R.id.btn_jar).setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            Intent intent = new Intent();            intent.setClassName(getApplication(), "com.zhh.librarydemo.JarActivity");            startActivity(intent);        }    });}

}

jar_layout布局:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

</LinearLayout>

在清单文件中注册:

<activity android:name="com.zhh.librarydemo.JarActivity"/>

转载于:https://blog.51cto.com/1206995290qq/2331970

你可能感兴趣的文章
开发webpart时建立图像文件夹和CSS,js文件夹
查看>>
backbone学习总结(二)
查看>>
ionic + cordova+angularJs 搭建的H5 App完整版总结
查看>>
博客开通了
查看>>
Cloneable接口和循环冗余校验算法
查看>>
Spring事务管理只对出现运行期异常进行回滚
查看>>
清理SQL多余登录信息
查看>>
[Array]189. Rotate Array
查看>>
HTML5的十大新特性
查看>>
简单ajax类, 比较小, 只用ajax功能时, 可以考虑它
查看>>
信息安全推荐书籍
查看>>
Thinkphp----------为什么Thinkphp会默认进入Index控制器的index方法
查看>>
C#集合
查看>>
IDEA的常用操作(快捷键)
查看>>
【强化学习篇】--强化学习从初识到应用
查看>>
[Python_7] Python Socket 编程
查看>>
UVa 374 - Big Mod
查看>>
org.apache.hadoop.fs-ChecksumException
查看>>
docker 安装
查看>>
docker 连接容器
查看>>