├── 360RePlugin ├── README.md ├── RePlugin │ ├── .gitignore │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── replugin │ │ │ │ └── pro │ │ │ │ ├── MainActivity.java │ │ │ │ └── base │ │ │ │ └── BaseApplication.java │ │ │ └── res │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── RePluginDemo │ ├── .gitignore │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── replugin │ │ │ │ └── demo │ │ │ │ ├── MainActivity.java │ │ │ │ └── TipsActivity.java │ │ │ └── res │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable │ │ │ └── ic_launcher_background.xml │ │ │ ├── layout │ │ │ ├── activity_main.xml │ │ │ └── activity_tips.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle └── plugin_demo.apk ├── AndroidVideoClip ├── .gitignore ├── README.md ├── app │ ├── build.gradle │ ├── libs │ │ └── isoviewer-1.0-RC-27.jar │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── play │ │ │ └── pro │ │ │ ├── BaseApplication.java │ │ │ ├── FullScreenActivity.java │ │ │ ├── MainActivity.java │ │ │ ├── constants │ │ │ └── FinalConstants.java │ │ │ ├── player │ │ │ ├── MediaManager.java │ │ │ └── PlayerControl.java │ │ │ ├── utils │ │ │ ├── ProUtils.java │ │ │ ├── ScreenUtils.java │ │ │ ├── TimerUtils.java │ │ │ ├── ToastUtils.java │ │ │ └── TrimVideoUtils.java │ │ │ └── widgets │ │ │ └── VideoSeekBar.java │ │ └── res │ │ ├── drawable │ │ ├── ic_back_wy_selector.xml │ │ └── seekbar_media_paly.xml │ │ ├── layout │ │ ├── activity_full_screen.xml │ │ ├── activity_main.xml │ │ └── include_player.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ ├── ic_back_white.png │ │ ├── ic_back_yellow.png │ │ ├── ic_cut.png │ │ ├── ic_launcher.png │ │ ├── ic_loading_point_grey.png │ │ ├── ic_loading_point_white.png │ │ ├── ic_logo.png │ │ ├── ic_media_fullscreen_shrink_white.png │ │ ├── ic_media_fullscreen_stretch_white.png │ │ ├── ic_media_play.png │ │ ├── ic_media_stop.png │ │ ├── ic_seekbar_thumb.png │ │ ├── ic_slider_left.png │ │ └── ic_slider_right.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ └── values │ │ ├── color.xml │ │ ├── strings.xml │ │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── BuglyHotfix ├── .gitignore ├── README.md ├── app │ ├── .gitignore │ ├── build.gradle │ ├── demo.jks │ ├── proguard-rules.pro │ ├── src │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── bugly │ │ │ │ └── hotfix │ │ │ │ └── pro │ │ │ │ ├── MainActivity.java │ │ │ │ └── base │ │ │ │ ├── SampleApplication.java │ │ │ │ └── SampleApplicationLike.java │ │ │ └── res │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ │ └── xml │ │ │ └── provider_paths.xml │ └── tinker-support.gradle ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── LICENSE ├── PlaySeekbar ├── .gitignore ├── README.md ├── app │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── play │ │ │ └── pro │ │ │ ├── BaseApplication.java │ │ │ ├── FullScreenActivity.java │ │ │ ├── MainActivity.java │ │ │ ├── constants │ │ │ └── FinalConstants.java │ │ │ ├── player │ │ │ ├── MediaManager.java │ │ │ └── PlayerControl.java │ │ │ ├── utils │ │ │ ├── ProUtils.java │ │ │ ├── ScreenUtils.java │ │ │ ├── TimerUtils.java │ │ │ └── ToastUtils.java │ │ │ └── widgets │ │ │ └── VideoSeekBar.java │ │ └── res │ │ ├── drawable │ │ ├── ic_back_wy_selector.xml │ │ └── seekbar_media_paly.xml │ │ ├── layout │ │ ├── activity_full_screen.xml │ │ ├── activity_main.xml │ │ └── include_player.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ ├── ic_back_white.png │ │ ├── ic_back_yellow.png │ │ ├── ic_launcher.png │ │ ├── ic_loading_point_grey.png │ │ ├── ic_loading_point_white.png │ │ ├── ic_logo.png │ │ ├── ic_media_fullscreen_shrink_white.png │ │ ├── ic_media_fullscreen_stretch_white.png │ │ ├── ic_media_play.png │ │ ├── ic_media_stop.png │ │ ├── ic_seekbar_thumb.png │ │ ├── ic_slider_left.png │ │ └── ic_slider_right.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ └── values │ │ ├── color.xml │ │ ├── strings.xml │ │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── mdFile │ └── img1.gif └── settings.gradle ├── README.md ├── RecordVideo ├── README.md ├── app │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── record │ │ │ └── video │ │ │ ├── activitys │ │ │ ├── MainActivity.java │ │ │ ├── MediaRecordActivity.java │ │ │ └── MediaResultPreActivity.java │ │ │ ├── bean │ │ │ ├── MediaInfoBean.java │ │ │ └── item │ │ │ │ ├── AbsMediaInfoItem.java │ │ │ │ ├── MediaItem.java │ │ │ │ └── media │ │ │ │ ├── ImageInfoItem.java │ │ │ │ └── VideoInfoItem.java │ │ │ ├── config │ │ │ ├── able │ │ │ │ └── ResultCallback.java │ │ │ ├── base │ │ │ │ └── BaseApplication.java │ │ │ └── constants │ │ │ │ ├── KeyConstants.java │ │ │ │ ├── NotifyConstants.java │ │ │ │ └── ProConstants.java │ │ │ ├── utils │ │ │ ├── CameraUtils.java │ │ │ ├── DevUtils.java │ │ │ ├── MediaDealUtils.java │ │ │ ├── RotateTransformation.java │ │ │ ├── TimerUtils.java │ │ │ ├── ToastUtils.java │ │ │ └── player │ │ │ │ ├── RecordMediaManager.java │ │ │ │ └── RecordPlayerControl.java │ │ │ └── widget │ │ │ ├── MediaRecorderView.java │ │ │ ├── RecordLoadDialog.java │ │ │ └── RecordProgressBar.java │ │ └── res │ │ ├── anim │ │ ├── anim_record_loading.xml │ │ ├── noanim_left_in.xml │ │ └── noanim_left_out.xml │ │ ├── drawable-hdpi │ │ ├── chat_focusing.png │ │ ├── chat_play_big.png │ │ ├── chat_play_middle.png │ │ ├── photograph.png │ │ ├── photograph_back.png │ │ ├── photograph_confirm.png │ │ ├── photograph_invert_camera.png │ │ ├── photograph_return.png │ │ └── photograph_transcribe.png │ │ ├── drawable-xhdpi │ │ ├── chat_focusing.png │ │ ├── chat_op_loading.png │ │ ├── chat_play_big.png │ │ ├── chat_play_middle.png │ │ ├── photograph.png │ │ ├── photograph_back.png │ │ ├── photograph_confirm.png │ │ ├── photograph_invert_camera.png │ │ ├── photograph_return.png │ │ └── photograph_transcribe.png │ │ ├── drawable │ │ └── camera_reverse_selector.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── activity_media_record.xml │ │ ├── activity_media_result_pre.xml │ │ ├── dialog_record_load.xml │ │ └── inflate_media_recorder.xml │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── values-1024x600 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1024x768 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1136x640 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1184x720 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1196x720 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1280x720 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1280x768 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1280x800 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1334x750 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1776x1080 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1812x1080 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-1920x1080 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-2560x1440 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-480x320 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-800x480 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-845x480 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ ├── values-960x540 │ │ ├── lay_x.xml │ │ └── lay_y.xml │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── local.properties ├── mdFile │ ├── img1.png │ ├── img2.png │ ├── img3.png │ └── img4.png └── settings.gradle ├── RecordView ├── .gitignore ├── README.md ├── app │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── pro │ │ │ └── record │ │ │ ├── MainActivity.java │ │ │ ├── utils │ │ │ ├── ProUtils.java │ │ │ └── ScreenUtils.java │ │ │ └── widgets │ │ │ └── RecordTimeView.java │ │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_location.png │ │ ├── ic_play.png │ │ └── ic_stop.png │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── mdFile │ └── img1.gif └── settings.gradle └── SophixPro ├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── sophix │ │ └── pro │ │ ├── MainActivity.java │ │ ├── base │ │ ├── BaseApplication.java │ │ └── hotfix │ │ │ └── SophixStubApplication.java │ │ └── utils │ │ ├── AppUtils.java │ │ ├── LogPrintUtils.java │ │ └── ToastUtils.java │ └── res │ ├── layout │ └── activity_main.xml │ ├── mipmap-xxhdpi │ └── logo.png │ └── values │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── demo.jks ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── mdFile ├── hint.txt ├── img1.png └── 包.zip └── settings.gradle /360RePlugin/README.md: -------------------------------------------------------------------------------- 1 | # [360RePlugin](https://github.com/afkT/Android/tree/master/360RePlugin) 2 | 3 | Android 插件化开发 - 360 RePlugin 框架 4 | 5 | 6 | - 具体参照 Demo 7 | 8 | - RePlugin 主程序 9 | 10 | - RePluginDemo 插件程序 -> 后续新插件都以该插件 Demo 相同 -------------------------------------------------------------------------------- /360RePlugin/RePlugin/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /360RePlugin/RePlugin/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /360RePlugin/RePlugin/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 27 5 | defaultConfig { 6 | applicationId "replugin.pro" 7 | minSdkVersion 19 8 | targetSdkVersion 27 9 | versionCode 1 10 | versionName "1.0" 11 | } 12 | buildTypes { 13 | release { 14 | minifyEnabled false 15 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 16 | } 17 | } 18 | } 19 | 20 | dependencies { 21 | implementation fileTree(dir: 'libs', include: ['*.jar']) 22 | implementation 'com.android.support:appcompat-v7:27.1.1' 23 | implementation 'com.android.support.constraint:constraint-layout:1.1.0' 24 | 25 | compile 'com.qihoo360.replugin:replugin-host-lib:2.2.4' 26 | } 27 | 28 | // ATTENTION!!! Must be PLACED AFTER "android{}" to read the applicationId 29 | apply plugin: 'replugin-host-gradle' 30 | 31 | /** 32 | * 配置项均为可选配置,默认无需添加 33 | * 更多可选配置项参见replugin-host-gradle的RepluginConfig类 34 | * 可更改配置项参见 自动生成RePluginHostConfig.java 35 | */ 36 | repluginHostConfig { 37 | /** 38 | * 是否使用 AppCompat 库 39 | * 不需要个性化配置时,无需添加 40 | */ 41 | useAppCompat = true 42 | /** 43 | * 背景不透明的坑的数量 44 | * 不需要个性化配置时,无需添加 45 | */ 46 | countNotTranslucentStandard = 6 47 | countNotTranslucentSingleTop = 2 48 | countNotTranslucentSingleTask = 3 49 | countNotTranslucentSingleInstance = 2 50 | } -------------------------------------------------------------------------------- /360RePlugin/RePlugin/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /360RePlugin/RePlugin/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /360RePlugin/RePlugin/app/src/main/java/replugin/pro/MainActivity.java: -------------------------------------------------------------------------------- 1 | package replugin.pro; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.os.Bundle; 5 | import android.view.View; 6 | 7 | import com.qihoo360.replugin.RePlugin; 8 | import com.qihoo360.replugin.model.PluginInfo; 9 | 10 | public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 11 | 12 | @Override 13 | protected void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | setContentView(R.layout.activity_main); 16 | } 17 | 18 | // 中文文档 19 | // https://github.com/Qihoo360/RePlugin/blob/dev/README_CN.md 20 | 21 | // 主程序 项目 22 | // https://github.com/Qihoo360/RePlugin/wiki/主程序接入指南 23 | 24 | // 插件项目 - 属于单独打包出来的 apk 25 | // https://github.com/Qihoo360/RePlugin/wiki/插件接入指南 26 | 27 | // 完整目录结构 28 | // https://github.com/Qihoo360/RePlugin/wiki/详细教程 29 | 30 | // 插件安装、卸载更新等 31 | // https://github.com/Qihoo360/RePlugin/wiki/插件的管理 32 | 33 | // 插件组件、跳转使用等 34 | // https://github.com/Qihoo360/RePlugin/wiki/插件的组件 35 | 36 | // 插件apk地址, 使用外置插件方式 37 | private String pluginApk = "plugin_demo.apk"; 38 | // 插件名 -> 其实就是插件的包名, 具有唯一性 39 | private String pluginPack = "replugin.demo"; 40 | 41 | @Override 42 | public void onClick(View v) { 43 | switch (v.getId()){ 44 | case R.id.vid_install: 45 | try { 46 | // 安装插件 47 | PluginInfo pi = RePlugin.install("/sdcard/" + pluginApk); 48 | if (pi != null) { 49 | // 预加载插件 50 | RePlugin.preload(pi); 51 | } 52 | } catch (Exception e){ 53 | e.printStackTrace(); 54 | } 55 | break; 56 | case R.id.vid_uninstall: 57 | try { 58 | // 卸载插件 59 | RePlugin.uninstall(pluginPack); 60 | } catch (Exception e){ 61 | e.printStackTrace(); 62 | } 63 | break; 64 | case R.id.vid_start: 65 | try { 66 | // 跳转插件页面 67 | RePlugin.startActivity(MainActivity.this, RePlugin.createIntent(pluginPack, 68 | "replugin.demo.MainActivity")); 69 | } catch (Exception e){ 70 | e.printStackTrace(); 71 | } 72 | break; 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /360RePlugin/RePlugin/app/src/main/java/replugin/pro/base/BaseApplication.java: -------------------------------------------------------------------------------- 1 | package replugin.pro.base; 2 | 3 | import com.qihoo360.replugin.RePluginApplication; 4 | 5 | /** 6 | * Created by Administrator on 2018/6/5. 7 | */ 8 | 9 | public class BaseApplication extends RePluginApplication { 10 | } 11 | -------------------------------------------------------------------------------- /360RePlugin/RePlugin/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 |