SdkProject/channel/test/config.properties
@@ -1 +1 @@ PLUGINS=jpush;bugly PLUGINS= SdkProject/library/build.gradle
@@ -1,6 +1,30 @@ plugins { id 'com.android.library' } def rootPath = rootProject.getRootDir().getAbsolutePath() def channelPath = "${rootPath}/channel/${CHANNEL_NAME}" def applyGradle(String path) { path = "${path}.gradle" File file = file(path) if (file.exists()) apply from: path } applyGradle("${rootPath}/utils") applyGradle("${channelPath}/build") Properties localProp = loadProperties('local') Properties channelProp = loadProperties("${channelPath}/config") def plugins = channelProp.getProperty("PLUGINS").split(';') plugins.each { applyGradle("${rootPath}/plugins/${it}/build") } //渠道需要覆盖主目录的java文件 def channelJavaFiles = getAllFiles(new ArrayList<File>(), "${channelPath}/java") android { compileSdkVersion 29 @@ -16,6 +40,13 @@ consumerProguardFiles "consumer-rules.pro" } flavorDimensions "version" productFlavors { merger { dimension "version" } } buildTypes { release { minifyEnabled false @@ -26,11 +57,58 @@ sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } lintOptions { checkReleaseBuilds false abortOnError false } //合并资源 sourceSets { main { java { //剔除主目录下,渠道重复的类 channelJavaFiles.each { def tag = "java\\" def str = it.getAbsolutePath() def str1 = str.substring(0, str.indexOf(tag)) def str2 = str.substring(str1.length() + tag.length(), str.length()) exclude str2 } } } merger { java { srcDirs "${channelPath}/java" } jniLibs.srcDirs "${channelPath}/libs" res.srcDirs "${channelPath}/res" manifest { File file = file("${channelPath}/AndroidManifest.xml") if (file.exists()) srcFile "${channelPath}/AndroidManifest.xml" } //合并插件 plugins.each { def pluginPath = "${rootPath}/plugins/${it}" java.srcDirs "${pluginPath}/java" jniLibs.srcDirs "${pluginPath}libs" res.srcDirs "${pluginPath}/res" manifest { File file = file("${pluginPath}/AndroidManifest.xml") if (file.exists()) srcFile "${pluginPath}/AndroidManifest.xml" } } } } } dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.3' implementation 'androidx.navigation:navigation-fragment:2.3.1' implementation 'androidx.navigation:navigation-ui:2.3.1' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' SdkProject/library/src/main/java/com/secondworld/universalsdk/CodeA2U.java
New file @@ -0,0 +1,40 @@ package com.secondworld.universalsdk; /** * Created by Administrator on 2018/7/18 0018. */ public interface CodeA2U { /** * 资源拷贝完成 */ int AssetCopyFinished = 0; /** * 电量改变 */ int BatteryLevel = 1; /** * 充电状态改变 */ int BatteryCharging = 2; /** * 回调sdk逻辑完毕 */ int SdkInitComplete = 90; /** * 回调android设备信息 */ int DeviceInfo = 3; /** * 回调推送的独立id */ int PushClientID = 4; /** * 回调外部存储根目录地址 */ int ExternalStorage = 5; /** * 触发了退出游戏逻辑, 打开二次确认界面 */ int ExitGame = 6; } SdkProject/library/src/main/java/com/secondworld/universalsdk/CodeU2A.java
New file @@ -0,0 +1,60 @@ package com.secondworld.universalsdk; /** * Created by Administrator on 2018/7/18 0018. */ public interface CodeU2A { /** * 执行资源拷贝 */ int AssetCopy = 0; /** * 执行开始电量改变,充电状态改变监听 */ int BatteryListenStart = 1; /** * 执行停止电量改变,充电状态改变监听 */ int BatteryListenStop = 2; /** * 获取唯一识别码 */ int UniqueID = 3; /** * 申请在AndroidManifest文件中 */ int RequestManifestPermissions = 4; /** * 单独动态申请某一个权限 */ int RequestPermission = 5; /** * 重启应用 */ int RestartApp = 6; /** * 拷贝文本信息 */ int CopyContent = 7; /** * 打开网址 */ int OpenWebView = 8; /** * SDK初始化, 完全自动初始化的流程, 完成必要逻辑后再回调回去 */ int Init = 9; /** * 安装应用 */ int InstallAPK = 10; /** * 外部存储根目录地址 */ int ExteneralStorage = 11; /** * 拷贝游戏资源 */ int CopyOneAsset = 12; } SdkProject/library/src/main/java/com/secondworld/universalsdk/H2EngineSDK.java
@@ -1,4 +1,36 @@ package com.secondworld.universalsdk; import com.secondworld.universalsdk.command.ICommand; import org.json.JSONObject; import java.util.HashMap; public class H2EngineSDK { public static HashMap<Integer, ICommand> allCommand = new HashMap(); public static void init() { } private static void AddCommand(ICommand command) { allCommand.put(command.getCode(), command); } //unity 发来的消息 public static void HandleUnityMessage(String json) { try { JSONObject _json = new JSONObject(json); int code = _json.getInt("code"); ICommand command = allCommand.get(code); if (command == null) { return; } command.process(json); } catch (Exception e) { } } } SdkProject/library/src/main/java/com/secondworld/universalsdk/command/CmdAssetCopy.java
New file @@ -0,0 +1,14 @@ package com.secondworld.universalsdk.command; import com.secondworld.universalsdk.CodeU2A; public class CmdAssetCopy implements ICommand { @Override public int getCode() { return CodeU2A.AssetCopy; } @Override public void process(String json) { } } SdkProject/library/src/main/java/com/secondworld/universalsdk/command/CmdInit.java
New file @@ -0,0 +1,18 @@ package com.secondworld.universalsdk.command; import com.secondworld.universalsdk.CodeU2A; /** * 游戏初始化 */ public class CmdInit implements ICommand { @Override public int getCode() { return CodeU2A.Init; } @Override public void process(String json) { } } SdkProject/library/src/main/java/com/secondworld/universalsdk/command/ICommand.java
New file @@ -0,0 +1,12 @@ package com.secondworld.universalsdk.command; /** * unity 传递过来的命令 */ public interface ICommand { int getCode(); void process(String json); } SdkProject/merger/.gitignore
File was deleted SdkProject/merger/build.gradle
File was deleted SdkProject/merger/consumer-rules.pro
SdkProject/merger/proguard-rules.pro
File was deleted SdkProject/merger/src/androidTest/java/com/secondworld/merger/ExampleInstrumentedTest.java
File was deleted SdkProject/merger/src/main/AndroidManifest.xml
File was deleted SdkProject/merger/src/test/java/com/secondworld/merger/ExampleUnitTest.java
File was deleted SdkProject/settings.gradle
@@ -1,4 +1,3 @@ include ':merger' include ':library' include ':app' rootProject.name = "SdkProject" SdkProject/utils.gradle
@@ -1,12 +1,30 @@ //加载本集配置properties文件 def loadProperties(String name) { Properties properties = new Properties() InputStream inputStream = project.rootProject.file("${name}.properties").newDataInputStream(); InputStream inputStream = project.rootProject.file("${name}.properties").newDataInputStream() properties.load(inputStream) return properties } //递归读取该目录下的文件 def getAllFiles(ArrayList<File> list, String path) { list.clear() File file = file(path) if (file.isFile()) { list.add(file) return list } def files = file.listFiles() files.each { if (it.isDirectory()) getAllFiles(list,it.getAbsolutePath()) else list.add(it) print "\n" } return list } ext { getAllFiles = this.&getAllFiles loadProperties = this.&loadProperties }