您的位置:首页 > 移动开发 > Android开发

android中实现多个apk文件。

2016-02-25 12:52 786 查看
http://blog.csdn.net/zhuyouleixuexi/article/details/7450055

有时一个大项目下面会有很多个小模块,如果小模块之间没有联系,这时可以将每个小模块作为单独的项目,生成apk。

这时就涉及到怎么将多个apk放到一个项目中。

首先,将小模块生成的apk放到项目的assets文件夹中



java代码:

[html] view
plain

package cn.onecomm.zhenghe.activity;  

  

import java.io.File;  

import java.io.FileOutputStream;  

import java.io.IOException;  

import java.io.InputStream;  

import java.util.ArrayList;  

import java.util.List;  

  

import android.app.Activity;  

import android.app.AlertDialog;  

import android.app.AlertDialog.Builder;  

import android.content.BroadcastReceiver;  

import android.content.ComponentName;  

import android.content.Context;  

import android.content.DialogInterface;  

import android.content.Intent;  

import android.content.IntentFilter;  

import android.content.pm.PackageInfo;  

import android.content.pm.PackageManager;  

import android.net.Uri;  

import android.os.Bundle;  

import android.util.Log;  

import android.view.View;  

import android.view.View.OnClickListener;  

import android.widget.ImageView;  

import android.widget.Toast;  

  

public class MainActivity extends Activity {  

    private ImageView baoxian_zhushou;  

    ArrayList<String> packagNameList;  

    private MyReceiver receiver;  

  

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);  

  

        initpackagNameList();  

  

        // 监听系统新安装程序的广播  

        receiver = new MyReceiver();  

        IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);// 注册广播机制  

        filter.addDataScheme("package"); // 必须添加这项,否则拦截不到广播  

        registerReceiver(receiver, filter);  

  

        baoxian_zhushou = (ImageView) findViewById(R.id.baoxian_zhushou);  

                 

                 // 主页面小模块的图标  

        baoxian_zhushou.setOnClickListener(new OnClickListener() {  

            public void onClick(View v) {  

  

                // 检查是否已经安装  

                Log.d("time", "clicked start " + System.currentTimeMillis()  

                        + "");  

                boolean installed = detectApk("cn.oncomm.activity");  

  

                if (installed) {// 已经安装直接起动  

                    Log.d("time", "getPackageManager start "  

                            + System.currentTimeMillis() + "");  

  

                    Intent intent = new Intent();  

                    // 组件名称,第一个参数是包名,也是主配置文件Manifest里设置好的包名 第二个是类名,要带上包名  

                    intent.setComponent(new ComponentName("cn.oncomm.activity",  

                            "cn.oncomm.activity.MailActivity"));  

                    intent.setAction(Intent.ACTION_VIEW);  

  

                    Log.d("time", "setAction start "  

                            + System.currentTimeMillis() + "");  

                    startActivity(intent);  

  

                } else {// 未安装先安装  

                    //  

                    // get the cacheDir.  

                    File fileDir = getFilesDir();  

                    final String cachePath = fileDir.getAbsolutePath()  

                            + "/pingAnAccident3.0.apk";  

                    retrieveApkFromAssets(MainActivity.this,  

                            "pingAnAccident3.0.apk", cachePath);  

                    showInstallConfirmDialog(MainActivity.this, cachePath);  

                }  

            }  

        });  

    }  

  

    // 捆绑安装  

    public boolean retrieveApkFromAssets(Context context, String fileName,  

            String path) {  

        boolean bRet = false;  

  

        try {  

            File file = new File(path);  

            if (file.exists()) {  

                return true;  

            } else {  

                file.createNewFile();  

                InputStream is = context.getAssets().open(fileName);  

                FileOutputStream fos = new FileOutputStream(file);  

  

                byte[] temp = new byte[1024];  

                int i = 0;  

                while ((i = is.read(temp)) != -1) {  

                    fos.write(temp, 0, i);  

                }  

                fos.flush();  

                fos.close();  

                is.close();  

  

                bRet = true;  

            }  

  

        } catch (IOException e) {  

            Toast.makeText(context, e.getMessage(), 2000).show();  

            Builder builder = new Builder(context);  

            builder.setMessage(e.getMessage());  

            builder.show();  

            e.printStackTrace();  

        }  

  

        return bRet;  

    }  

  

    /**  

     *提示用户安装程序  

     */  

    public void showInstallConfirmDialog(final Context context,  

            final String filePath) {  

        AlertDialog.Builder tDialog = new AlertDialog.Builder(context);  

        tDialog.setIcon(R.drawable.info);  

        tDialog.setTitle("未安装该程序");  

        tDialog.setMessage("请安装该程序");  

  

        tDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {  

  

            public void onClick(DialogInterface dialog, int which) {  

  

                // 修改apk权限  

                try {  

                    String command = "chmod " + "777" + " " + filePath;  

                    Runtime runtime = Runtime.getRuntime();  

                    runtime.exec(command);  

                } catch (IOException e) {  

                    e.printStackTrace();  

                }  

                // install the apk.  

                Intent intent = new Intent(Intent.ACTION_VIEW);  

                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  

                intent.setDataAndType(Uri.parse("file://" + filePath),  

                        "application/vnd.android.package-archive");  

                context.startActivity(intent);  

  

            }  

        });  

  

        tDialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {  

  

            public void onClick(DialogInterface dialog, int which) {  

            }  

        });  

  

        tDialog.show();  

    }  

  

    /**  

     * 检测是否已经安装  

     *   

     * @param packageName  

     * @return true已安装 false未安装  

     */  

    private boolean detectApk(String packageName) {  

        return packagNameList.contains(packageName.toLowerCase());  

  

    }  

  

    private void initpackagNameList() {  

        // 初始化小模块列表  

        packagNameList = new ArrayList<String>();  

        PackageManager manager = this.getPackageManager();  

        List<PackageInfo> pkgList = manager.getInstalledPackages(0);  

        for (int i = 0; i < pkgList.size(); i++) {  

            PackageInfo pI = pkgList.get(i);  

            packagNameList.add(pI.packageName.toLowerCase());  

        }  

  

    }  

  

    /**  

     *   

     * 设置广播监听  

     *   

     */  

    private class MyReceiver extends BroadcastReceiver {  

        public void onReceive(Context context, Intent intent) {  

            if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {  

  

                String packName = intent.getDataString().substring(8);  

  

                Log.e(intent.getDataString() + "====", packName);  

                // package:cn.oncomm.activity cn.oncomm.activity  

                // packName为所安装的程序的包名  

                packagNameList.add(packName.toLowerCase());  

  

                // 删除file目录下的所有以安装的apk文件  

                File file = getFilesDir();  

                File[] files = file.listFiles();  

                for (File f : files) {  

                    if (f.getName().endsWith(".apk")) {  

                        f.delete();  

                    }  

                }  

  

            }  

        }  

    }  

}  

主页面的

[html] view
plain

main.xml文件:  

[html] view
plain

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:id="@+id/layContain" android:layout_width="fill_parent"  

    android:layout_height="fill_parent" android:orientation="horizontal">  

    <!-- android:background="#FFC0CB"-->  

  

  

    <LinearLayout android:id="@+id/layFirst"  

        android:layout_width="400px" android:layout_height="fill_parent"  

        android:orientation="vertical" android:layout_marginBottom="50dp">  

  

        <LinearLayout android:layout_width="fill_parent"  

            android:layout_height="fill_parent" android:orientation="vertical">  

  

            <LinearLayout android:layout_width="fill_parent"  

                android:layout_height="wrap_content" android:orientation="horizontal"  

                android:layout_marginTop="30dp">  

   

                <LinearLayout android:layout_width="wrap_content"  

                    android:layout_height="wrap_content" android:layout_weight="1"  

                    android:gravity="center_horizontal" android:orientation="vertical">  

  

                    <ImageView android:id="@+id/baoxian_zhushou"  

                        android:layout_width="wrap_content" android:layout_height="wrap_content"  

                        android:src="@drawable/icon" />  

                    <TextView android:layout_width="wrap_content"  

                        android:layout_height="wrap_content" android:text="平安助手"  

                          />  

  

                </LinearLayout>  

                  

                                  

            </LinearLayout>  

        </LinearLayout>  

    </LinearLayout>  

</LinearLayout>  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: