From 0d64ea1528e3e1cbf8c8a77c915a891895b8aac9 Mon Sep 17 00:00:00 2001 From: Gh0st Date: Sat, 16 Jul 2016 01:15:54 +0800 Subject: [PATCH 01/46] [commit] runapp --- README.md | 4 ++-- .../java/com/code19/androidcommon/MainActivity.java | 2 +- .../java/com/code19/androidcommon/model/AppBean.java | 10 ++++++++++ .../java/com/code19/androidcommon/model/AppBiz.java | 1 + .../androidcommon/ui/adapter/AppRecyAdapter.java | 8 ++++++-- app/src/main/res/layout/activity_main.xml | 4 ---- library/build.gradle | 2 +- .../src/main/java/com/code19/library/AppUtils.java | 12 ++++++------ .../com/code19/library/service/DownloadService.java | 2 -- 9 files changed, 27 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index b902f32..2d600f6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # 使用方式 * 这个library还在功能迭代中,功能不尽完善... ```gradle -compile 'com.code19.library:library:0.0.7' +compile 'com.code19.library:library:0.0.8' ``` # 常用工具类 - 每一个Android开发者在日常开发中都会积累一些自己的代码片段 @@ -33,7 +33,6 @@ AppUtils.getAppName(MainActivity.this,com.code19.androidcommon); * getAppVersionName 获取应用版本名称 * getAppVersionCode 获取应用版本号 * getAppInstaller 获取应用的安装市场 - * getAppPackageName 获取应用包名 * hasPermission 是否有权限 * isInstalled 应用是否安装 * installApk 安装应用 @@ -45,6 +44,7 @@ AppUtils.getAppName(MainActivity.this,com.code19.androidcommon); * killProcesses 结束进程 * runScript 运行脚本 * getRootPermission 获得root权限 + * runApp 启动应用 - BitmapUtils.java Bitmap工具类 * decodeFile 解析文件为bitmap diff --git a/app/src/main/java/com/code19/androidcommon/MainActivity.java b/app/src/main/java/com/code19/androidcommon/MainActivity.java index 0d06ccf..e44190d 100644 --- a/app/src/main/java/com/code19/androidcommon/MainActivity.java +++ b/app/src/main/java/com/code19/androidcommon/MainActivity.java @@ -85,7 +85,7 @@ private void testLog() { L.init(true, "admin"); L.v("Verbose..."); L.d("Debug..."); - L.i("info。。。"); + L.i("info..."); L.w("Warn..."); L.e("Error..."); L.a("ASSERT..."); diff --git a/app/src/main/java/com/code19/androidcommon/model/AppBean.java b/app/src/main/java/com/code19/androidcommon/model/AppBean.java index db5210c..d8b1909 100644 --- a/app/src/main/java/com/code19/androidcommon/model/AppBean.java +++ b/app/src/main/java/com/code19/androidcommon/model/AppBean.java @@ -31,6 +31,16 @@ public class AppBean { private int appVerCode; private String appInstaller; private boolean isSystemApp; + private String appPackage; + + public String getAppPackage() { + return appPackage; + } + + public void setAppPackage(String appPackage) { + this.appPackage = appPackage; + } + public String getAppName() { return appName; diff --git a/app/src/main/java/com/code19/androidcommon/model/AppBiz.java b/app/src/main/java/com/code19/androidcommon/model/AppBiz.java index 0581224..0749099 100644 --- a/app/src/main/java/com/code19/androidcommon/model/AppBiz.java +++ b/app/src/main/java/com/code19/androidcommon/model/AppBiz.java @@ -63,6 +63,7 @@ public void getData(Context c, OnAppLoadListener onAppLoadListener) { appBean.setAppVerCode(appVersionCode); appBean.setAppInstaller(appInstaller); appBean.setSystemApp(systemApp); + appBean.setAppPackage(info.packageName); list.add(appBean); } } diff --git a/app/src/main/java/com/code19/androidcommon/ui/adapter/AppRecyAdapter.java b/app/src/main/java/com/code19/androidcommon/ui/adapter/AppRecyAdapter.java index 0474848..6e4d363 100644 --- a/app/src/main/java/com/code19/androidcommon/ui/adapter/AppRecyAdapter.java +++ b/app/src/main/java/com/code19/androidcommon/ui/adapter/AppRecyAdapter.java @@ -23,10 +23,11 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import com.code19.androidcommon.R; import com.code19.androidcommon.model.AppBean; +import com.code19.library.AppUtils; +import com.code19.library.L; import java.util.List; @@ -44,6 +45,7 @@ public AppRecyAdapter(Context context, List list) { this.mLayoutInflater = LayoutInflater.from(context); } + @Override public AppViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new AppViewHolder(mLayoutInflater.inflate(R.layout.app_recy, parent, false)); @@ -71,7 +73,9 @@ public AppViewHolder(View itemView) { itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Toast.makeText(mContext, "点击了Item" + getAdapterPosition(), Toast.LENGTH_SHORT).show(); + L.i(mDatas.get(getAdapterPosition()).getAppPackage(), getAdapterPosition()); + //Toast.makeText(mContext, "点击了Item" + getAdapterPosition(), Toast.LENGTH_SHORT).show(); + AppUtils.runApp(mContext, mDatas.get(getAdapterPosition()).getAppPackage()); } }); } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 5805a8e..ac1a72a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -74,10 +74,6 @@ android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:text="@string/virificationutils"/> - + android:inputType="time" 时间键盘--> diff --git a/library/src/main/java/com/code19/library/CipherUtils.java b/library/src/main/java/com/code19/library/CipherUtils.java index 50958ce..0af7bbf 100644 --- a/library/src/main/java/com/code19/library/CipherUtils.java +++ b/library/src/main/java/com/code19/library/CipherUtils.java @@ -48,8 +48,7 @@ public class CipherUtils { public static String md5(String input) { try { MessageDigest messageDigest = MessageDigest.getInstance("MD5"); - byte[] inputByteArray = input.getBytes(); - messageDigest.update(inputByteArray); + messageDigest.update(input.getBytes()); byte[] resultByteArray = messageDigest.digest(); char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; char[] resultCharArray = new char[resultByteArray.length * 2]; @@ -64,6 +63,25 @@ public static String md5(String input) { } } + public static String md5L(String input) { + try { + MessageDigest mdInst = MessageDigest.getInstance("MD5"); + mdInst.update(input.getBytes()); + byte[] md = mdInst.digest(); + StringBuilder hexString = new StringBuilder(); + for (byte aMd : md) { + String shaHex = Integer.toHexString(aMd & 0xFF); + if (shaHex.length() < 2) { + hexString.append(0); + } + hexString.append(shaHex); + } + return hexString.toString(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return ""; + } public static String md5(InputStream in) { int bufferSize = 256 * 1024; @@ -155,11 +173,11 @@ public static String XorDecode(String str, String privateKey) { * @param password password.length()==8*n * @throws InvalidKeyException if password.length!=8*n */ - public static void desEncode(String srcFile, String destFile, String password) throws InvalidKeyException { + public static void DESEncode(String srcFile, String destFile, String password) throws InvalidKeyException { desCrypto(srcFile, destFile, password, true); } - public static void desDecode(String srcFile, String destFile, String password) throws InvalidKeyException { + public static void DESDecode(String srcFile, String destFile, String password) throws InvalidKeyException { desCrypto(srcFile, destFile, password, false); } @@ -204,13 +222,34 @@ private static void desCrypto(String srcFile, String destFile, String password, } } + public static String sha1(String str) { + try { + MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1"); + digest.update(str.getBytes()); + byte messageDigest[] = digest.digest(); + StringBuilder hexString = new StringBuilder(); + for (byte aMessageDigest : messageDigest) { + String shaHex = Integer.toHexString(aMessageDigest & 0xFF); + if (shaHex.length() < 2) { + hexString.append(0); + } + hexString.append(shaHex); + } + return hexString.toString(); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return ""; + } + public static String sha1(File file) { FileInputStream in = null; try { in = new FileInputStream(file); MessageDigest messageDigest = MessageDigest.getInstance("SHA-1"); byte[] b = new byte[1024 * 1024 * 10];//10M memory - int len = 0; + int len; while ((len = in.read(b)) > 0) { messageDigest.update(b, 0, len); } diff --git a/library/src/main/java/com/code19/library/FileUtils.java b/library/src/main/java/com/code19/library/FileUtils.java index f79c896..ed1e526 100644 --- a/library/src/main/java/com/code19/library/FileUtils.java +++ b/library/src/main/java/com/code19/library/FileUtils.java @@ -358,7 +358,7 @@ public static String getAppExternalPath(Context context) { } public static String getExtraPath(String folder) { - String storagePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.pathSeparator + folder; + String storagePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + folder; File file = new File(storagePath); if (!file.exists()) { file.mkdir(); diff --git a/library/src/main/java/com/code19/library/ImageUtils.java b/library/src/main/java/com/code19/library/ImageUtils.java index eeb20a4..6af33d9 100644 --- a/library/src/main/java/com/code19/library/ImageUtils.java +++ b/library/src/main/java/com/code19/library/ImageUtils.java @@ -16,6 +16,8 @@ package com.code19.library; +import android.content.Context; +import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; @@ -26,10 +28,13 @@ import android.graphics.Rect; import android.graphics.RectF; import android.media.ExifInterface; +import android.net.Uri; +import android.provider.MediaStore; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; @@ -139,6 +144,28 @@ public static boolean bitmap2File(Bitmap bitmap, File imageFile) { } } + public static boolean bitmap2gallery(Context context, Bitmap bitmap, String filename) { + boolean saveSuccess; + String extraPath = FileUtils.getExtraPath("19code"); + File file = new File(extraPath, filename); + try { + FileOutputStream outputStream = new FileOutputStream(file); + boolean compress = bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream); + outputStream.flush(); + outputStream.close(); + MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getPath(), filename, null); + context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file))); + saveSuccess = compress; + } catch (FileNotFoundException e) { + saveSuccess = false; + e.printStackTrace(); + } catch (IOException e) { + saveSuccess = false; + e.printStackTrace(); + } + return saveSuccess; + } + public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos); diff --git a/library/src/main/java/com/code19/library/SystemUtils.java b/library/src/main/java/com/code19/library/SystemUtils.java index 7fd4cce..e52581a 100644 --- a/library/src/main/java/com/code19/library/SystemUtils.java +++ b/library/src/main/java/com/code19/library/SystemUtils.java @@ -157,7 +157,6 @@ public static int getAppVersionCode(Context context) { return version; } - public static void goHome(Context context) { Intent mHomeIntent = new Intent(Intent.ACTION_MAIN); mHomeIntent.addCategory(Intent.CATEGORY_HOME); From fd01a55d1e3f97e536dd4ad92dfe26fae5d4cb64 Mon Sep 17 00:00:00 2001 From: Gh0st Date: Sat, 27 Aug 2016 13:34:44 +0800 Subject: [PATCH 18/46] =?UTF-8?q?=E5=88=A0=E9=99=A4lib=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/src/main/AndroidManifest.xml | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml index 8a4c869..3c3aa80 100644 --- a/library/src/main/AndroidManifest.xml +++ b/library/src/main/AndroidManifest.xml @@ -14,21 +14,8 @@ ~ limitations under the License. --> - - - - - - - - - - - - - - + Date: Thu, 1 Sep 2016 11:41:55 +0800 Subject: [PATCH 19/46] =?UTF-8?q?=E5=88=A0=E9=99=A4DES=E5=8A=A0=E5=AF=86?= =?UTF-8?q?=E8=A7=A3=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 - .../java/com/code19/library/CipherUtils.java | 57 ------------------- 2 files changed, 59 deletions(-) diff --git a/README.md b/README.md index d59b302..d40e164 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,6 @@ AppUtils.getAppName(MainActivity.this,com.code19.androidcommon); * base64Decode Base64解密 * XorEncode 异或加密 * XorDecode 异或解密 - * DESEncode 文件Des加密 - * DESDecode 文件Des解密 * sha1 字符串sha1值 * sha1 文件hash校验 diff --git a/library/src/main/java/com/code19/library/CipherUtils.java b/library/src/main/java/com/code19/library/CipherUtils.java index 0af7bbf..204f760 100644 --- a/library/src/main/java/com/code19/library/CipherUtils.java +++ b/library/src/main/java/com/code19/library/CipherUtils.java @@ -165,63 +165,6 @@ public static String XorDecode(String str, String privateKey) { return result; } - private static byte iv[] = {1, 2, 3, 4, 5, 6, 7, 8}; - - /** - * @param srcFile source file - * @param destFile encode after file - * @param password password.length()==8*n - * @throws InvalidKeyException if password.length!=8*n - */ - public static void DESEncode(String srcFile, String destFile, String password) throws InvalidKeyException { - desCrypto(srcFile, destFile, password, true); - } - - public static void DESDecode(String srcFile, String destFile, String password) throws InvalidKeyException { - desCrypto(srcFile, destFile, password, false); - } - - private static void desCrypto(String srcFile, String destFile, String password, boolean isEncode) throws InvalidKeyException { - InputStream is = null; - OutputStream out = null; - CipherInputStream cis = null; - int mode; - if (isEncode) { - mode = Cipher.ENCRYPT_MODE; - } else { - mode = Cipher.DECRYPT_MODE; - } - try { - SecureRandom secureRandom = new SecureRandom(); - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); - SecretKey secretKey = keyFactory.generateSecret(new DESKeySpec(password.getBytes())); - IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); - Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); - cipher.init(mode, secretKey, ivParameterSpec, secureRandom); - File file = new File(srcFile); - is = new FileInputStream(file); - out = new FileOutputStream(destFile); - cis = new CipherInputStream(is, cipher); - byte[] buffer = new byte[1024]; - int len; - while ((len = cis.read(buffer)) > 0) { - out.write(buffer, 0, len); - } - } catch (InvalidAlgorithmParameterException e) { - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (NoSuchPaddingException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidKeySpecException e) { - e.printStackTrace(); - } finally { - FileUtils.closeIO(is, out, cis); - } - } - public static String sha1(String str) { try { MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1"); From d8526fc8fff5a72d62475ba2ca8f9ea751182462 Mon Sep 17 00:00:00 2001 From: Gh0st Date: Thu, 1 Sep 2016 11:46:38 +0800 Subject: [PATCH 20/46] lint --- .../code19/androidcommon/HandlerActivity.java | 2 +- .../code19/androidcommon/MainActivity.java | 27 ------------------- app/src/main/res/layout/activity_main.xml | 13 --------- 3 files changed, 1 insertion(+), 41 deletions(-) diff --git a/app/src/main/java/com/code19/androidcommon/HandlerActivity.java b/app/src/main/java/com/code19/androidcommon/HandlerActivity.java index a16c6c7..6ce498a 100644 --- a/app/src/main/java/com/code19/androidcommon/HandlerActivity.java +++ b/app/src/main/java/com/code19/androidcommon/HandlerActivity.java @@ -33,7 +33,7 @@ private static class MyHandler extends Handler { private final WeakReference mMainActivityWeakReference; public MyHandler(HandlerActivity activity) { - mMainActivityWeakReference = new WeakReference(activity); + mMainActivityWeakReference = new WeakReference<>(activity); } @Override diff --git a/app/src/main/java/com/code19/androidcommon/MainActivity.java b/app/src/main/java/com/code19/androidcommon/MainActivity.java index dffd1f6..f0a8f72 100644 --- a/app/src/main/java/com/code19/androidcommon/MainActivity.java +++ b/app/src/main/java/com/code19/androidcommon/MainActivity.java @@ -16,7 +16,6 @@ package com.code19.androidcommon; -import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; @@ -30,11 +29,9 @@ import com.code19.androidcommon.ui.activity.VerificationActivity; import com.code19.library.FileUtils; import com.code19.library.ImageUtils; -import com.code19.library.L; import com.code19.library.ViewUtils; public class MainActivity extends AppCompatActivity implements View.OnClickListener { - private Context c = this; private LinearLayout mMain; @Override @@ -44,15 +41,11 @@ protected void onCreate(Bundle savedInstanceState) { mMain = (LinearLayout) findViewById(R.id.main); Button virification = (Button) findViewById(R.id.virification); Button deviceutils = (Button) findViewById(R.id.deviceutils); - Button systemutils = (Button) findViewById(R.id.systemutils); Button testutils = (Button) findViewById(R.id.testutils); Button fileutils = (Button) findViewById(R.id.fileutils); - Button logutils = (Button) findViewById(R.id.logutils); Button apputils = (Button) findViewById(R.id.apputils); - systemutils.setOnClickListener(this); testutils.setOnClickListener(this); fileutils.setOnClickListener(this); - logutils.setOnClickListener(this); apputils.setOnClickListener(this); deviceutils.setOnClickListener(this); virification.setOnClickListener(this); @@ -67,9 +60,6 @@ public void onClick(View v) { case R.id.deviceutils: startActivity(new Intent(MainActivity.this, DeviceActivity.class)); break; - case R.id.logutils: - testLog(); - break; case R.id.fileutils: String url = "http://3lin9.19code.com/app.apk"; FileUtils.upgradeApp(MainActivity.this, url); @@ -78,26 +68,9 @@ public void onClick(View v) { Bitmap bitmap = ViewUtils.createViewBitmap(mMain); ImageUtils.bitmap2gallery(this, bitmap, "main.png"); break; - case R.id.systemutils: - break; case R.id.virification: startActivity(new Intent(MainActivity.this, VerificationActivity.class)); break; } } - - private String xml = "GeorgeJohnReminderDon't forget the meeting!"; - private String json = "{'type1': {'0': {'age': 12,'name': 'zhangsdan'},'1': {'age': 13,'name': 'lisi'},'num': '123'},'type3': {'0': {'age': 14,'name': 'wangwu'},'1': {'age': 15,'name': 'maliu'},'num': '456',}}"; - - private void testLog() { - L.init(true, "admin"); - L.v("Verbose..."); - L.d("Debug..."); - L.i("info..."); - L.w("Warn..."); - L.e("Error..."); - L.a("ASSERT..."); - L.json(json); - L.xml(xml); - } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a47b6f2..e4184ed 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -40,12 +40,6 @@ android:background="?android:attr/selectableItemBackground" android:text="@string/deviceutils"/> -