A. android系统中的app安装后的各个文件路径在哪里
在系统中system/app文件夹中。
在android系统中安装软件时,系统会将其安装在设定好的路径当中,即system/app路径。后来下载的APP可以卸载,但系统自带的APP不能卸载,否则会引发系统的崩溃。
在安装APP时,也可以直接将文件复制到手机里(手机内存、Storage
Card都可以),在手机上执行该CAB文件即可安装。
(1)androidapkassets扩展阅读
android系统中的app不同格式安装:
1、CAB格式,直接将文件到手机里,都可以在手机上执行该CAB文件即可安装。
2、EXE格式,EXE格式的程序可分为手机上直接运行(即绿色软件的形式)和连接电脑同步安装2种形式。
3、免安装软件(绿色软件),将文件直接拷贝到手机里(手机内存、Storage
Card都可以)即可运行。这种软件在网上下载时一般是RAR或ZIP格式压缩包,只需先在电脑上解压,将解压出来的文件夹拷贝到手机里即可运行。
4、Cpl文件,将文件直接拷贝到手机windows目录下,即可在设置中出现相应的选项。如SoftKeyAppleEx.cpl对应会出现软件设置选项。
参考资料:网络-手机软件
B. 如何打开assets文件夹中的apk
在自己的app中安装assets目录下的apk文件的方法:
详细过程如下:
{
ContextmContext;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext=this;
//Toast.makeText(this,""+Environment.getExternalStorageDirectory().getAbsolutePath(),0).show();
if(ApkFromAssets(this,"test.apk",Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.apk")){
Builderm=newAlertDialog.Builder(mContext)
.setIcon(R.drawable.ic_launcher).setMessage("是否安装?")
.setIcon(R.drawable.ic_launcher)
.setPositiveButton("yes",newOnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
Intentintent=newIntent(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();
}
}
publicbooleanApkFromAssets(Contextcontext,StringfileName,Stringpath){
booleanIsFinish=false;
try{
InputStreamis=context.getAssets().open(fileName);
Filefile=newFile(path);
file.createNewFile();
FileOutputStreamfos=newFileOutputStream(file);
byte[]temp=newbyte[1024];
inti=0;
while((i=is.read(temp))>0){
fos.write(temp,0,i);
}
fos.close();
is.close();
IsFinish=true;
}catch(IOExceptione){
e.printStackTrace();
}
returnIsFinish;
}
}
C. android工程中assets文件夹是干什么用的
这里面可以放一些文件,这些文件在打包生成apk的时候不会被编译,以文件原有的方式来保存,可以通过AssetManager来操作这些文件。详细的可以网络一下,说的肯定比我说的详细。
D. android 安装 应用 assets 文件 放在 哪里
因为系统在编译的时候不会编译assets下的资源文件,所以我们不能通过R.XXX.ID的方式访问它们。那我么能不能通过该资源的绝对路径去访问它们呢?因为apk安装之后会放在/data/app/**.apk目录下,以apk形式存在,asset/res和被绑定在apk里,并不会解压到/data/data/YourApp目录下去,所以我们无法直接获取到assets的绝对路径,因为它们根本就没有。
E. android 修改apk的asset目录后怎么安装
从整体上看,一般的对于assets 里面的apk进行安装的操作是先将 apk 复制到sd上 或者其他的可读取存储位置。比如我拿到的机子 有两个路径
/mnt/emmc/ 手机的内部存储位置(其他的手机不一定有)
/mnt/sdcard/ 手机的sd存储位置
复制到这两个路径都OK。
首先要获取assets目录下文件的数据流,用于写到存储位置上。
//这里的fileName 这个是assets文件下的全文件名 包括后缀名。
path 是存储的路径位置,绝对路径。
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();
通过Context 获取到AssetManager
F. android应用开发之assets和raw的区别
android raw与assets区别
*res/raw和assets的相同点:
1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
*res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
*读取文件资源:
1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作
InputStream is = getResources().openRawResource(R.id.filename);
2.(1)读取assets下的文件资源,通过以下方式获取输入流来进行写操作
AssetManager am = null;
am = getAssets();
InputStream is = am.open("filename");
(2)如果用Videoview来播放:
VideoView.setVideoUri(Uri.parse("android.resource://" + getpackageName() + "/" + R.raw.movie));
G. Android中assets目录和raw目录的区别和使用情况
今天看到有人问Android中assets目录和raw目录的区别和使用情况。
能提出这个问题的,应该都了解它们的共同点:
它们会被原封不动的拷贝到APK中,而不会像其它资源文件那样被编译成二进制的形式。
要说区别,当然最直观的就是获取它们的InputStream的API不一样了。
assets:InputStream assets = getAssets().open("xxxx");
raw:InputStream raw = getResources().openRawResource(R.raw.xxxx)
有人可能会有疑问,既然它们都是被原封不动的拷贝到APK中,而assets可以创建目录结构,又能够动态的列出assets中的所有资源getAssets().list(String path);,这些raw都做不到,那raw还有什么用呢?
下面我们来说说它们主要的区别:
由 于raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源 文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适 的。
assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与 Android中的一些类和方法兼容度更低。同时,由于你需要一个字符串路径来获取这个目录下的文件描述符,访问的速度会更慢。但是把一些文件放在这个目 录下会使一些操作更加方便,比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。
另 外,网上关于assets和raw的资料都千篇一律了,因此关于这两者中单个文件大小不能超过1M的**错误**描述也在传播,即如果读取超过1M的文件 会报"Data exceeds UNCOMPRESS_DATA_MAX (1314625 vs 1048576)"的IOException,还引申出种种解决方案。个人认为不应该有这样的限制,为了验证这个说法写了个Demo,发现将近5M的压缩 包在assets和raw中都能正常访问,因此在这里纠正一下,理论上只要打包不超过Android APK 50M大小的限制都是没有问题的。当然了,不排除是Android很早期的时候因为设备硬件原因aapt在编译的时候对这两个文件夹大小做出了限制,如果 是这样,较新版的ADT应该不会出现这种情况。
更新:为了验证我最后一段的描述,避免导致结果误 导,晚上写了几个小Demo验证之后又花了点时间查阅了一些资料,最后找到这篇文章http://ponystyle.com/blog/2010/03 /26/dealing-with-asset-compression-in-android-apps/ ,文章比较简单清晰,我就不翻译了。这篇文章应该还蛮有说服力的,从根本上说明了当时Android2.3以前产生资源文件单个文件大小不能超过1M的原 因和部分解决方法。不过由于限制是当时的aapt决定的,现在已经更新了多个版本的aapt已经不存在这种问题了,也印证了我最后一段的猜想。
H. android assets文件占内存吗
android assets的文件夹会占用文件大小的,一般都不允许超过1M,可以通过如下方式解决:
比如在assets目录下放置了一个“test.zip”的资源。当apk安装之后,可能我就需要访问这个"test.zip"资源文件。(可能我会去解压到某处)
在网上找了很长时间,说什么在assets下的资源怎么怎么不能超过1M、或者要分成多个不超过1M的小文件,然后用的时候在拼成一个大文件、说什么要用到什么数据库。总之说的,感觉没有一个有用的。
于是自己就实现了一个从assets下拷贝资源到sd卡中的一个功能。这里不限制非得拷贝到sd卡中。
之所以要拷贝出来,是因为在assets内的资源随apk安装之后,不好访问。所以想拷贝到一个容易访问的地方。比如是一个assets下的是一个zip文件,为需要在安装之后进行解压。而解压的时候我又想使用 ant.jar (支持编码) 。于是我先将zip资源拷贝到一个地方,然后在进行解压。
I. android apk安装后增怎样将assets里面的文件保存在sd卡下面
你既然摘掉assets那可能是研发人员吧。代码里面读取assets的文件,然后保存到sd卡下面就可以了。
另外可以手动操作,把apk反编译,或者直接解压后,将assets里面的文件直接取出来。