Android将Activity 或者说Library打成jar包供第三方调用(解决资源文件不能打包的问题)

因为 library 里面含有 Activity   、java代码、res资源,但是jar只能打包java源代码   

在打成jar包时已经把资源id设置成了 library的id值 ,如果这样拿给别人用时   放到工程里 res等资源的ID又重新分配了一个新值,运行时会提示找不到资源(图片 字符串 样式 等等),怎么办呢

看了http://blog.csdn.net/xiaanming/article/details/9257853的博客 尝试写了个demo


思路:在myapplication module 里调用 Librar打成的jar包 里面的SDK(自定义)类里面的静态方法start ()方法 启动jar包里SDKActivity       Activity里 设置有layout布局(主要再这里)

1.我们新建一个Library   Module取名为testlibrary,这个就是等下我们需要打包成Jar的工程,之后创建一个SDK类,含有一个静态方法start() 负责启动SDKActivity  


2、创建SDKActivity

package com.gamewinner.testlibrary;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class SDKActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.e("Unity","-----SDKActivity----onCreate-----");

        //查找布局文件
        int id = getResources().getIdentifier("activity_sdk","layout",getPackageName());
        Log.e("Unity","-----SDKActivity----onCreate-----id:"+id);
        setContentView(id);
        //查找布局里的 控件 android:id="@+id/xx  这样的类型是归类到 id下面的
        int tvb = getResources().getIdentifier("tvb","id",getPackageName());
        Log.e("Unity","-----SDKActivity----onCreate-----id:"+tvb);
        TextView tvBB = (TextView) findViewById(tvb);

        tvBB.setText("TVVVVVVVVVVVVVVVV");
    }
}

我们把通过R.id.XX 获取资源iD的方式  改成getResources().getIdentifier  根据资源类型 和资源名称获取资源iD    第三个参数包名是R类的包名 也是工程的包名 看下图就理解了  (这是Library里分配的R类的id  最后要把资源和jar包放到其他工程时 就会重新分配ID的


 

然后打成jar包, 在Library 的build.gradle添加下面代码

task exportJar(type: Copy) {
    delete 'build/libs/AndroidPlugin.jar'
    from('build/intermediates/bundles/release/')
    into('release/')
    include('classes.jar')
    ///Rename the jar
    rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(build)

然后执行Gradle任务如图



最后 把jar包拷贝到myApplication里使用 资源也要拷贝过来

AndroidManifest.xml里声明SDKActivity


调用结果


猜你喜欢

转载自blog.csdn.net/u014199143/article/details/80360879