마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

apk 파일 추출에 관련해서 질문드립니다!!!

0 추천

아스트로 등의 파일탐색기를 통해 apk파일을 추출할 수 있다는 것은 알고 있는데,

아스트로와 같이 apk을 추출하는 코드를 구현하려고 합니다.

이러한 정보를 얻을 수 있는 사이트나 논문 같은 것들이 있을까요?

익명사용자 님이 2014년 11월 12일 질문

1개의 답변

0 추천

간단 합니다. 

src dir 을 받아다가 파일로 저장하세요

/*
 * AppList.java
 * Copyright 2013 Burke Choi All rights reserved.
 *             http://www.sarangnamu.net
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.sarangnamu.apk_extractor;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import net.sarangnamu.common.BkMath;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.graphics.drawable.Drawable;

public class AppList {
    private static AppList inst;

    public static AppList getInstance() {
        if (inst == null) {
            inst = new AppList();
        }

        return inst;
    }

    private AppList() {

    }

    public ArrayList<PkgInfo> getInstalledApps(Context context) {
        return getAllApps(context, true);
    }

    public ArrayList<PkgInfo> getAllApps(Context context, boolean hideSystemApp) {
        ArrayList<PkgInfo> res = new ArrayList<PkgInfo>();
        List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(0);

        for (int i = 0; i < packs.size(); i++) {
            PackageInfo p = packs.get(i);
            if (hideSystemApp) {
                if ((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
                    continue;
                }
            }

            PkgInfo newInfo = new PkgInfo();
            newInfo.appName = p.applicationInfo.loadLabel(context.getPackageManager()).toString();
            newInfo.pkgName = p.packageName;
            newInfo.versionName = p.versionName;
            newInfo.versionCode = p.versionCode;
            newInfo.icon = p.applicationInfo.loadIcon(context.getPackageManager());
            newInfo.srcDir = p.applicationInfo.sourceDir;
            newInfo.size = new File(p.applicationInfo.sourceDir).length();
            newInfo.appSize = BkMath.toFileSizeString(newInfo.size);

            res.add(newInfo);
        }

        return res;
    }

    public void clearBitmap() {

    }

    ////////////////////////////////////////////////////////////////////////////////////
    //
    // PkgInfo
    //
    ////////////////////////////////////////////////////////////////////////////////////

    public static class PkgInfo {
        public String appName;
        public String pkgName;
        public String versionName;
        public String appSize;
        public String srcDir;
        public int versionCode = 0;
        public long size;
        public Drawable icon;
    }
}

 

aucd29 (218,390 포인트) 님이 2014년 11월 12일 답변
...