android apk巢狀 從一個apk啟動另外一個apk
a.apk-主應用 b.apk-被啟動應用
主要思想:把b.apk放到assets目錄下,由於有大小限制(1M),所以改名成b.mp3(因為mp3,jpg,png,mp4等不會檢查,不會限制大小),然後在用的時候再改回來
1.具體實現:
public void intallApp(Context context) {
try {
String path = context.getFilesDir().getAbsolutePath()+ "/b.apk"; //從assets中解壓到這個目錄
File f = new File(path);
if (!f.exists()) {
f.createNewFile();
}
InputStream is = context.getAssets().open("b.mp3");//assets裡的檔案在應用安裝後仍然存在於apk檔案中
inputStreamToFile(is, f);
String cmd = "chmod 777 " + f.getAbsolutePath();
Runtime.getRuntime().exec(cmd);
cmd = "chmod 777 " + f.getParent();
Runtime.getRuntime().exec(cmd);
// 嘗試提升上2級的父資料夾許可權,在閱讀外掛下載到手機儲存時,剛好用到了2級目錄
// /data/data/packagename/files/這個目錄下面所有的層級目錄都需要提升許可權,才可安裝apk,彈出安裝介面
cmd = "chmod 777 " + new File(f.getParent()).getParent();
Runtime.getRuntime().exec(cmd);
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
String type = "application/vnd.android.package-archive";
/* 設定intent的file與MimeType */
intent.setDataAndType(Uri.fromFile(f), type);
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void inputStreamToFile(InputStream inputStream,File file){
///InputStream inputStream = null;
OutputStream outputStream = null;
try {
// read this file into InputStream
//inputStream = new FileInputStream("test.txt");
// write the inputStream to a FileOutputStream
outputStream = new FileOutputStream(file);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
System.out.println("Done!");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
// outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.如果是啟動已安裝的應用,實現如下:
public boolean startApp(Context context, String packageName) {
//String packageName = "XXX";
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
PackageManager pm = context.getPackageManager();
List<ResolveInfo> listInfos = pm.queryIntentActivities(intent, 0);
String className = null;
for (ResolveInfo info : listInfos) {
if (packageName.equals(info.activityInfo.packageName)) {
className = info.activityInfo.name;
break;
}
}
if (className != null && className.length() > 0) {
intent.setComponent(new ComponentName(packageName, className));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
context.startActivity(intent);
return true;
}
return false;
}
如果你知道包名,還知道作為啟動的那activity的類名,就更簡單了,就可以省掉上面查詢的過程,直接啟動。
相關文章
- 如何將兩個APK合併成一個APKAPK
- 一個section加密的apk的分析加密APK
- Android Apk反編譯系列教程(一)如何反編譯APKAndroidAPK編譯
- appium 能打包成 apk,啟動這個 apk 就能調起待測 app 自動化麼APPAPK
- Android Apk 打包AndroidAPK
- 【Android APK】解析SD卡上的APK檔案AndroidAPKSD卡
- Cordova 打包 apk,html 打包 apkAPKHTML
- 分享一個自動編譯,打包,簽名 android apk 的小指令碼編譯AndroidAPK指令碼
- Android Apk反編譯系列教程(二)APK重打包AndroidAPK編譯
- Android逆向之旅---動態方式破解apk終極篇(加固apk破解方式)AndroidAPK
- Android APK打包流程AndroidAPK
- 「Android」 APK瘦身探索AndroidAPK
- 轉[Android]APK打包過程詳解(一)AndroidAPK
- IPTV系統一個後臺可以有多個apk介面嗎?APK
- PhoneGap Hybrid APP 開發實戰(1):第一個 Android APKAPPAndroidAPK
- Flutter 打包 android端 apkFlutterAndroidAPK
- Android空包Apk簽名AndroidAPK
- Android之Apk加殼AndroidAPK
- Android APK 瘦身實踐AndroidAPK
- PhalApi-APK–APK檔案解包處理APIAPK
- 某當網apk加固脫個soAPK
- 動態庫so打包到android apkAndroidAPK
- Android解決The APK file app-debug.apk does not exist on disk.AndroidAPKAPP
- java解析APKJavaAPK
- 簽名apkAPK
- 簽名打包Android版apkAndroidAPK
- Android之重新簽名APKAndroidAPK
- Android開發 —— apk打包流程AndroidAPK
- 使用Android studio建立apkAndroidAPK
- APK檔案淺析-AndroidAPKAndroid
- Gluon 編譯 JavaFx -> android apk編譯JavaAndroidAPK
- apkTool---一個簡單好用的apk反編譯工具APK編譯
- 涼兮社工+apk開戶籍涼兮社工+apk開戶籍涼兮社工+apk開戶籍涼兮社工+apk開戶籍APK
- apk加殼加密工具(apk protect) v1.0下載APK加密
- 用Android SDK Build Tools手動構建APKAndroidUIAPK
- Android studio 自動複製生成的 apkAndroidAPK
- Apk_動態除錯方案APK除錯
- 動態載入APK原理分享APK