The following code explains you how to extract apk which is installed in the device.
Permissions Required :
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
activity_main.xml :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>MainActivity.class :
package com.example.simpleapkextractor;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.Iterator;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnItemClickListener {
PackageManager manager;
private ArrayAdapter<String> mAdapter = null;
ArrayList<String> mPkgs = new ArrayList<String>();
ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.list);
mListView.setOnItemClickListener(this);
new LoadMainContent().execute();
}
class LoadMainContent extends AsyncTask<Void, Void, Void> {
private static final String TAG = "123456";
ProgressDialog mProgressDialog = null;
protected Void doInBackground(Void[] paramArrayOfVoid) {
MainActivity.this.manager = getPackageManager();
Iterator<?> localIterator = manager.getInstalledApplications(128).iterator();
try {
while (localIterator.hasNext()) {
ApplicationInfo localApplicationInfo = (ApplicationInfo) localIterator.next();
String pkgName = localApplicationInfo.packageName;
String appLabel = manager.getApplicationLabel(localApplicationInfo).toString();
Drawable icon = manager.getApplicationIcon(localApplicationInfo.packageName);
Log.i(TAG, "pkg: " + pkgName);
mPkgs.add(pkgName);
}
} catch (Exception localException) {
localException.printStackTrace();
}
return null;
}
protected void onPostExecute(Void paramVoid) {
super.onPostExecute(paramVoid);
this.mProgressDialog.dismiss();
mAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, mPkgs);
mListView.setAdapter(mAdapter);
}
protected void onPreExecute() {
super.onPreExecute();
this.mProgressDialog = ProgressDialog.show(MainActivity.this, "Please wait ...", "Loading Apps");
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
letsExtract(arg2);
}
private void letsExtract(int paramInt) {
String str = (mPkgs.get(paramInt));
ApplicationInfo localApplicationInfo = getAppInfo(str);
File localFile1;
File localFile2;
if (localApplicationInfo.packageName.equalsIgnoreCase(str)) {
localFile1 = new File(localApplicationInfo.publicSourceDir);
localFile2 = new File(Environment.getExternalStorageDirectory() + "/Meher-ExtractAPKs/" + str + ".apk");
File localFile3 = new File(Environment.getExternalStorageDirectory() + "/Meher-samples/ExtractAPK/");
if (!localFile3.exists()) {
localFile3.mkdirs();
}
try {
FileChannel localFileChannel1 = new FileInputStream(localFile1).getChannel();
FileChannel localFileChannel2 = new FileOutputStream(localFile2).getChannel();
localFileChannel2.transferFrom(localFileChannel1, 0L, localFileChannel1.size());
localFileChannel1.close();
localFileChannel2.close();
Toast.makeText(this, "" + mPkgs.get(paramInt), 1).show();
Log.d("123456", "success");
} catch (Exception e) {
e.printStackTrace();
}
}
}
ApplicationInfo getAppInfo(String paramString) {
Iterator<?> localIterator = this.manager.getInstalledApplications(128).iterator();
ApplicationInfo localApplicationInfo = null;
while (localIterator.hasNext()) {
localApplicationInfo = (ApplicationInfo) localIterator.next();
if (localApplicationInfo.packageName.equalsIgnoreCase(paramString)) {
return localApplicationInfo;
}
}
return localApplicationInfo;
}
}
Note : you can extend this app by using custom adapter to show proper app name with app icon.
Good Post. Helpful...:)
ReplyDelete