如何打开assets文件夹中的apk?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何打开assets文件夹中的apk?相关的知识,希望对你有一定的参考价值。
如题,小弟在assets文件夹中有个a.apk文件,我该如何做才能在程序中安装这个apk呢,请大侠们明示,小弟谢过先!
在自己的app中安装assets目录下的apk文件的方法:
详细过程如下:
public class MainActivity extends Activity
Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
//Toast.makeText(this, ""+Environment.getExternalStorageDirectory().getAbsolutePath(), 0).show();
if(copyApkFromAssets(this, "test.apk", Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.apk"))
Builder m = new AlertDialog.Builder(mContext)
.setIcon(R.drawable.ic_launcher).setMessage("是否安装?")
.setIcon(R.drawable.ic_launcher)
.setPositiveButton("yes", new OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.apk"),
"application/vnd.android.package-archive");
mContext.startActivity(intent);
);
m.show();
public boolean copyApkFromAssets(Context context, String fileName, String path)
boolean copyIsFinish = false;
try
InputStream is = context.getAssets().open(fileName);
File file = new File(path);
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
byte[] temp = new byte[1024];
int i = 0;
while ((i = is.read(temp)) > 0)
fos.write(temp, 0, i);
fos.close();
is.close();
copyIsFinish = true;
catch (IOException e)
e.printStackTrace();
return copyIsFinish;
参考技术A 通常的做法是将assets下面的apk拷贝到手机内存或者sdcard中,然后进行安装 参考技术B 1、安装APK代码 Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.parse("file://" + path), "application/vnd.android.package-archive"); mContext.startActivity(intent);2、拷贝APK代码:/** * 将assets文件夹下的apk fileName,拷贝到路径path * * @param context * 上下文环境 * @param fileName * apk名称 * @param path * 存储APK路径 * @return */ public boolean copyApkFromAssets(Context context, String fileName, String path) boolean bRet = false; try InputStream is = context.getAssets().open(fileName); File file = new File(path); file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); byte[] temp = new byte[1024]; int i = 0; while ((i = is.read(temp)) > 0) fos.write(temp, 0, i); fos.close(); is.close(); bRet = true; catch (IOException e) e.printStackTrace(); return bRet; 参考技术C 安装这样: http://www.devdiv.com/viewthread.php?tid=38533&highlight=apk路径获取activity().getAssets() 参考技术D 下面通过一个例子讲解读取资源文件显示在ScrollView当中:
1.ReadAsset.java文件:
Java代码
package com.example.ReadAsset;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
public class ReadAsset extends Activity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.read_asset);
try
//Return an AssetManager instance for your application's package
InputStream is = getAssets().open("index.txt");
int size = is.available();
// Read the entire asset into a local byte buffer.
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
// Convert the buffer into a string.
String text = new String(buffer, "GB2312");
// Finally stick the string into the text view.
TextView tv = (TextView) findViewById(R.id.text);
tv.setText(text);
catch (IOException e)
// Should never happen!
throw new RuntimeException(e);
2. read_asset.xml文件
Java代码
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:paddingTop="50dip">
android:layout_height="wrap_content" android:textStyle="normal" />
3.然后在工程里面新建一个assets文件夹,随便放一个index.txt的文件在其中,运行
Ctrl+F11进行测试即可。
Mac 如何导出ipa文件中Assets.car包中的切图
在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xcassets 中的话,只能在包中看到 Assets.car 文件,这时需要把里面的图片资源取出来。
在 Github 上 cartool 是专门解决这个问题的开源工具,下载,使用 Xcode 打开工程,添加如下配置;
运行工程,就可以看到控制台有输出 Log
在指定文件中就会有解压过的图片资源。
---恢复内容结束---
在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xcassets 中的话,只能在包中看到 Assets.car 文件,这时需要把里面的图片资源取出来。
在 Github 上 cartool 是专门解决这个问题的开源工具,下载,使用 Xcode 打开工程,添加如下配置;
运行工程,就可以看到控制台有输出 Log
在指定文件中就会有解压过的图片资源。
========================== 分割线 ==================== 2019-11-20 更新(原方式在新Mac OS 系统运行 会 Crash)===========================
在新Mac-OS系统下,上述方式 run 时会 Crush。换另一种方式来获取图片资源:
GitHub 库:https://github.com/iHTCboy/acextract
从 GitHub 上下载最新版本,把可执行文件acextract放入 /usr/local/bin/ 目录下
终端执行命令:
acextract -i +源文件路径(~***.car) -o + 导出文件路径
查看命令:
acextract -i 源文件路径(.car) -l
以上是关于如何打开assets文件夹中的apk?的主要内容,如果未能解决你的问题,请参考以下文章