Browse Source

optizime code

master
wuliang 3 years ago
parent
commit
90b903b192
  1. 3
      lib/src/main/java/com/wuliang/lib/AppUtils.kt
  2. 2
      lib/src/main/java/com/wuliang/lib/FileUtils.kt
  3. 22
      lib/src/main/java/com/wuliang/lib/InstallActivity.java
  4. 7
      lib/src/main/java/com/wuliang/lib/MultiApkXapkInstaller.kt
  5. 2
      lib/src/main/java/com/wuliang/lib/RomUtils.java
  6. 8
      lib/src/main/java/com/wuliang/lib/SingleApkXapkInstaller.kt
  7. 6
      lib/src/main/java/com/wuliang/lib/UtilsFileProvider.java
  8. 14
      lib/src/main/java/com/wuliang/lib/XapkInstaller.kt
  9. 19
      lib/src/main/java/com/wuliang/lib/XapkInstallerFactory.kt

3
lib/src/main/java/com/wuliang/lib/AppUtils.kt

@ -1,6 +1,5 @@
package com.wuliang.lib
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
@ -13,7 +12,7 @@ import java.io.File
* author: Blankj
* blog : http://blankj.com
* time : 2016/08/02
* desc : App
* desc : app utils,just copy from https://github.com/Blankj/AndroidUtilCode
* </pre>
*/

2
lib/src/main/java/com/wuliang/lib/FileUtils.kt

@ -7,7 +7,7 @@ import java.io.File
* author: Blankj
* blog : http://blankj.com
* time : 2016/05/03
* desc : utils about file
* desc : utils about file,just copy from https://github.com/Blankj/AndroidUtilCode
* </pre>
*/

22
lib/src/main/java/com/wuliang/lib/InstallActivity.java

@ -36,10 +36,8 @@ public class InstallActivity extends AppCompatActivity {
private static final String PACKAGE_INSTALLED_ACTION =
"com.wuliang.common.SESSION_API_PACKAGE_INSTALLED";
public static final String KEY_XAPK_PATH = "xapk_path";
public static final String KEY_APK_PATHS = "apk_path";
private String xapkPath;
private List<String> apkPaths;
private ExecutorService installXapkExectuor;
@ -48,16 +46,13 @@ public class InstallActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_install);
initData();
installXapk();
}
public void initData() {
xapkPath = getIntent().getStringExtra(KEY_XAPK_PATH);
apkPaths = getIntent().getStringArrayListExtra(KEY_APK_PATHS);
}
@ -80,9 +75,7 @@ public class InstallActivity extends AppCompatActivity {
installXapkExectuor = Executors.newSingleThreadExecutor();
installXapkExectuor.execute(() -> {
try {
mSession = initSession();
for (String apkPath : apkPaths) {
@ -90,24 +83,21 @@ public class InstallActivity extends AppCompatActivity {
}
commitSession(mSession);
} catch (IOException e) {
e.printStackTrace();
abandonSession();
}
});
}
@TargetApi(21)
private PackageInstaller.Session initSession() throws IOException {
PackageInstaller.Session session = null;
PackageInstaller.Session session;
PackageInstaller packageInstaller = getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
int sessionId = 0;
int sessionId;
sessionId = packageInstaller.createSession(params);
session = packageInstaller.openSession(sessionId);
@ -131,9 +121,7 @@ public class InstallActivity extends AppCompatActivity {
@TargetApi(21)
private void commitSession(PackageInstaller.Session session) {
// Create an install status receiver.
Intent intent = new Intent(this, InstallActivity.class);
intent.setAction(PACKAGE_INSTALLED_ACTION);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
@ -141,7 +129,6 @@ public class InstallActivity extends AppCompatActivity {
// Commit the session (this will start the installation workflow).
session.commit(statusReceiver);
}
@TargetApi(21)
@ -198,12 +185,9 @@ public class InstallActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
super.onDestroy();
if (installXapkExectuor != null && !installXapkExectuor.isShutdown()) {
installXapkExectuor.shutdown();
}
abandonSession();
}
}

7
lib/src/main/java/com/wuliang/lib/MultiApkXapkInstaller.kt

@ -9,9 +9,7 @@ import java.io.File
/**
* <pre>
* author : wuliang
* e-mail : l_wu@mingboent.com
* time : 2019/09/27
* desc :
* </pre>
*/
class MultiApkXapkInstaller(xapkPath: String, xapkUnzipOutputDir: File)
@ -22,7 +20,6 @@ class MultiApkXapkInstaller(xapkPath: String, xapkUnzipOutputDir: File)
}
override fun install(xapkPath: String, context: Context) {
val files = xapkUnzipOutputDir.listFiles()
val apkFilePaths = files.filter { file ->
@ -30,16 +27,13 @@ class MultiApkXapkInstaller(xapkPath: String, xapkUnzipOutputDir: File)
}.map { it.absolutePath }
enterInstallActivity(xapkPath, ArrayList(apkFilePaths), context)
}
private fun enterInstallActivity(xapkPath: String, apkFilePaths: ArrayList<String>, context: Context) {
Log.d(INSTALL_OPEN_APK_TAG, "multi apk xapk installer,enter InstallActivity,xapkPath:$xapkPath," +
"apkFilePaths:$apkFilePaths")
val intent = Intent(context, InstallActivity::class.java)
intent.putExtra(InstallActivity.KEY_XAPK_PATH, xapkPath)
intent.putStringArrayListExtra(InstallActivity.KEY_APK_PATHS, apkFilePaths)
if (context !is Activity) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
@ -47,5 +41,4 @@ class MultiApkXapkInstaller(xapkPath: String, xapkUnzipOutputDir: File)
context.startActivity(intent)
}
}

2
lib/src/main/java/com/wuliang/lib/RomUtils.java

@ -18,7 +18,7 @@ import java.util.Properties;
* author: Blankj
* blog : http://blankj.com
* time : 2018/07/04
* desc : utils about rom
* desc : utils about rom,just copy from https://github.com/Blankj/AndroidUtilCode
* </pre>
*/
public final class RomUtils {

8
lib/src/main/java/com/wuliang/lib/SingleApkXapkInstaller.kt

@ -7,33 +7,25 @@ import java.io.File
/**
* <pre>
* author : wuliang
* e-mail : l_wu@mingboent.com
* time : 2019/09/27
* desc :
* </pre>
*/
class SingleApkXapkInstaller(xapkPath: String, xapkUnzipOutputDir: File)
: XapkInstaller(xapkPath, xapkUnzipOutputDir) {
override fun install(xapkPath: String, context: Context) {
val files:Array<File>? = xapkUnzipOutputDir.listFiles()
files?.forEach { file ->
if ((file.isFile && file.name.endsWith(".apk"))) {
val filePath = file.absolutePath
if (!filePath.isNullOrEmpty()) {
Log.d(INSTALL_OPEN_APK_TAG, "single apk xapk installer,openDownloadApk")
installApp(filePath,context)
}
}
}
}
override fun getUnzipPath(): String? {

6
lib/src/main/java/com/wuliang/lib/UtilsFileProvider.java

@ -7,9 +7,7 @@ import androidx.core.content.FileProvider;
* author: blankj
* blog : http://blankj.com
* time : 2020/03/19
* desc :
* desc : just copy from https://github.com/Blankj/AndroidUtilCode and modify for file provider
* </pre>
*/
public class UtilsFileProvider extends FileProvider {
}
public class UtilsFileProvider extends FileProvider { }

14
lib/src/main/java/com/wuliang/lib/XapkInstaller.kt

@ -7,25 +7,13 @@ import java.io.File
/**
* <pre>
* author : wuliang
* e-mail : l_wu@mingboent.com
* time : 2019/09/27
* desc :
* </pre>
*/
abstract class XapkInstaller(val xapkPath: String, val xapkUnzipOutputDir: File) {
/**
* apk
*/
fun installXapk(context: Context) {
try {
install(xapkPath,context)
} catch (e: ZipException) {
}
install(xapkPath,context)
}
internal abstract fun install(xapkPath: String,context: Context)

19
lib/src/main/java/com/wuliang/lib/XapkInstallerFactory.kt

@ -10,16 +10,13 @@ import java.io.File
/**
* <pre>
* author : wuliang
* e-mail : l_wu@mingboent.com
* time : 2019/09/27
* desc :
* </pre>
*/
internal const val INSTALL_OPEN_APK_TAG = "install_open_apk_tag"
fun createXapkInstaller(xapkFilePath: String?): XapkInstaller? {
if (xapkFilePath.isNullOrEmpty()) {
return null
}
@ -27,32 +24,25 @@ fun createXapkInstaller(xapkFilePath: String?): XapkInstaller? {
val xapkFile = File(xapkFilePath)
val unzipOutputDirPath = createUnzipOutputDir(xapkFile)
if (unzipOutputDirPath.isNullOrEmpty()) {
return null
}
val unzipOutputDir = File(unzipOutputDirPath)
try {
//只保留apk文件和Android/obb下的文件,以及json文件用于获取主包(当有多个apk时)
ZipUtil.unpack(xapkFile, unzipOutputDir, NameMapper { name ->
when {
name.endsWith(".apk") -> return@NameMapper name
else -> return@NameMapper null
}
})
} catch (e: ZipException) {
e.printStackTrace()
return null
}
val files = unzipOutputDir.listFiles()
val apkSize = files.count { file ->
file.isFile && file.name.endsWith(".apk")
}
@ -66,14 +56,11 @@ fun createXapkInstaller(xapkFilePath: String?): XapkInstaller? {
} else {
SingleApkXapkInstaller(xapkFilePath, unzipOutputDir)
}
}
private fun createUnzipOutputDir(file: File): String? {
val filePathPex = file.parent + File.separator
val unzipOutputDir = filePathPex + getFileNameNoExtension(file)
val result = createOrExistsDir(unzipOutputDir)
return if (result)
@ -86,26 +73,20 @@ private fun unzipObbToAndroidObbDir(xapkFile: File, unzipOutputDir: File): Boole
val prefix = "Android/obb"
try {
//只保留apk文件和Android/obb下的文件,以及json文件用于获取主包(当有多个apk时)
ZipUtil.unpack(xapkFile, unzipOutputDir, NameMapper { name ->
when {
name.startsWith(prefix) -> return@NameMapper name.substring(prefix.length)
else -> return@NameMapper null
}
})
Log.d(INSTALL_OPEN_APK_TAG, "unzip obb to Android/obb succeed")
return true
} catch (e: ZipException) {
e.printStackTrace()
return false
}
}
/**

Loading…
Cancel
Save