为什么我在手机上看不到我安装的Android应用程序?

时间:2014-07-31 17:59:29

标签: android android-studio

我是android开发的新手,我有一个问题。

我使用Android Studio开发了我的应用程序并将其安装在我的手机上(未植根)。

我无法在/ data /"包名称"。

中看到它

但我可以看到其他应用程序:Facebook,Whatsapp等。

为什么呢?我如何安装它,并将其视为Facebook包目录。

由于

2 个答案:

答案 0 :(得分:1)

在系统观点上,/data指的是位于设备文件系统根目录的系统数据目录。但是,从用户的角度来看,它可以理解为位于设备外部存储根部的数据目录(通常但不总是SD卡)。对于系统,此目录的路径不同:例如/mnt/sdcard/data

由于无法通过/dataadb shell或非根生产设备上的任何文件系统资源管理器访问系统的ddms目录,我假设您指的是外部存储的data目录。

  • 外部存储空间

<external-storage>/data,或者最好是<external-storage>/Android/data,用于将与应用程序相关的数据存储在与您的应用程序包名称相同的目录下(通常为ext.yourbrandname.yourappname)。

但是你的应用程序并没有自动创建这样的目录。如果需要,您的应用必须创建此目录。因此,您没有看到这样的目录这一​​事实并不表明该应用程序未安装。

我使用下面的代码(通常是:createRootDirectory((Activity) this))来创建这样的目录。此代码专为minSdkVersion="8" targetSdkVersion="19"设计。可能存在更高minSdkVersion的优化,我没有在此进行调查:

public static String storagePathToAbsolutePath(String pathFromStorageRoot) {
    final StringBuffer buffer = new StringBuffer(255);

    buffer.append(Environment.getExternalStorageDirectory().getAbsolutePath());

    if (pathFromStorageRoot.charAt(0) != '/') {
        buffer.append('/');
    }

    buffer.append(pathFromStorageRoot);

    return buffer.toString();
}

public static boolean createRootDirectory(Context ctx) {
    // Constant, copied here: private static final String BASE_DIR = "/Android/data/";
    final String dataDir = storagePathToAbsolutePath(BASE_DIR + getPackageName(ctx) + "/")  
    final File f = new File(dataDir);
    return f.mkdirs();
}

附注: 使用[external-storage]/Android/data/<your application package name>是一个干净而有趣的解决方案:如果用户卸载应用程序,则会自动删除此相应的数据目录。如果<your application package name>位于其他任何地方,至少使用旧版本的Android(如8),就不会发生这种情况。

  • 内部存储空间

/data是一个系统目录,用于存储与应用程序相关的库,缓存等。 Directory /data

它包含一个data目录(因此其路径为/data/data/)。在本文中,您实际上每个已安装的应用程序包都找到一个目录:

Directory /data/data

每个已安装的软件包都有一个以ext.yourbrandname.yourappname目录中的软件包名称(&#34; /data/data&#34;)命名的目录,供系统使用。您的应用程序,无论它是什么,如果已安装,都会有一个目录。

答案 1 :(得分:-1)

  1. 如果您将文件存储在内部存储中,Android将自动创建完整软件包名称的目录。
  2. 在外部存储中保存文件是优先的。
  3. 发布查询之前首先在 Stack Overflow 论坛中搜索已回答的问题。 Similar Post Answered Already click on this Links
  4. 这是我的代码: 我正在 res / raw文件夹中读取图片文件并将其写入内部存储空间

            package com.splash.myapp;
    
            import java.io.IOException;
            import java.io.InputStream;
            import java.io.OutputStream;
    
            import android.app.Activity;
            import android.content.Context;
            import android.os.Bundle;
    
            public class SavingFiles extends Activity {
    
                OutputStream fos;
    
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.main_activity);
                    try {
                        InputStream inputStreamObj = getResources().openRawResource(R.raw.pics);
                        fos = openFileOutput("pics.png", Context.MODE_PRIVATE);
                        final byte[] buffer = new byte[1024];
                        int bytesRead = 0;
                        while ((bytesRead = inputStreamObj.read(buffer)) > 0) {
    
                            fos.write(buffer);
                        }
                        inputStreamObj.close();
    
                    } catch (Exception e) {
    
                        e.printStackTrace();
                    } finally {
                        try {
                            fos.flush();
                            fos.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
    
                    }
                }
    
            }
    

    您可以签入 DDMS 数据/数据/您的packageName / file