Showing
52 changed files
with
1649 additions
and
0 deletions
doc/aes资源解密资料/GameResAes/NativeAes.iml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<module external.linked.project.id="NativeAes" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4"> | ||
| 3 | + <component name="FacetManager"> | ||
| 4 | + <facet type="java-gradle" name="Java-Gradle"> | ||
| 5 | + <configuration> | ||
| 6 | + <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" /> | ||
| 7 | + <option name="BUILDABLE" value="false" /> | ||
| 8 | + </configuration> | ||
| 9 | + </facet> | ||
| 10 | + </component> | ||
| 11 | + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true"> | ||
| 12 | + <exclude-output /> | ||
| 13 | + <content url="file://$MODULE_DIR$"> | ||
| 14 | + <excludeFolder url="file://$MODULE_DIR$/.gradle" /> | ||
| 15 | + </content> | ||
| 16 | + <orderEntry type="inheritedJdk" /> | ||
| 17 | + <orderEntry type="sourceFolder" forTests="false" /> | ||
| 18 | + </component> | ||
| 19 | +</module> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
doc/aes资源解密资料/GameResAes/app/app.iml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4"> | ||
| 3 | + <component name="FacetManager"> | ||
| 4 | + <facet type="android-gradle" name="Android-Gradle"> | ||
| 5 | + <configuration> | ||
| 6 | + <option name="GRADLE_PROJECT_PATH" value=":app" /> | ||
| 7 | + <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.5.3" /> | ||
| 8 | + <option name="LAST_KNOWN_AGP_VERSION" value="3.5.3" /> | ||
| 9 | + </configuration> | ||
| 10 | + </facet> | ||
| 11 | + <facet type="android" name="Android"> | ||
| 12 | + <configuration> | ||
| 13 | + <option name="SELECTED_BUILD_VARIANT" value="debug" /> | ||
| 14 | + <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> | ||
| 15 | + <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> | ||
| 16 | + <afterSyncTasks> | ||
| 17 | + <task>generateDebugSources</task> | ||
| 18 | + </afterSyncTasks> | ||
| 19 | + <option name="ALLOW_USER_CONFIGURATION" value="false" /> | ||
| 20 | + <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> | ||
| 21 | + <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> | ||
| 22 | + <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" /> | ||
| 23 | + <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" /> | ||
| 24 | + <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> | ||
| 25 | + </configuration> | ||
| 26 | + </facet> | ||
| 27 | + </component> | ||
| 28 | + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7"> | ||
| 29 | + <output url="file://$MODULE_DIR$/build/intermediates/javac/debug/classes" /> | ||
| 30 | + <output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/classes" /> | ||
| 31 | + <exclude-output /> | ||
| 32 | + <content url="file://$MODULE_DIR$"> | ||
| 33 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" /> | ||
| 34 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" /> | ||
| 35 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> | ||
| 36 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" /> | ||
| 37 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" /> | ||
| 38 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" /> | ||
| 39 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugAndroidTest/out" isTestSource="true" generated="true" /> | ||
| 40 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" /> | ||
| 41 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> | ||
| 42 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" /> | ||
| 43 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" /> | ||
| 44 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" /> | ||
| 45 | + <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugUnitTest/out" isTestSource="true" generated="true" /> | ||
| 46 | + <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> | ||
| 47 | + <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> | ||
| 48 | + <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> | ||
| 49 | + <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" /> | ||
| 50 | + <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" /> | ||
| 51 | + <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" /> | ||
| 52 | + <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" /> | ||
| 53 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" /> | ||
| 54 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" /> | ||
| 55 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" /> | ||
| 56 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" /> | ||
| 57 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" /> | ||
| 58 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" /> | ||
| 59 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" /> | ||
| 60 | + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" /> | ||
| 61 | + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" /> | ||
| 62 | + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" /> | ||
| 63 | + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" /> | ||
| 64 | + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" /> | ||
| 65 | + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" /> | ||
| 66 | + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" /> | ||
| 67 | + <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> | ||
| 68 | + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> | ||
| 69 | + <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" /> | ||
| 70 | + <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" /> | ||
| 71 | + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> | ||
| 72 | + <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> | ||
| 73 | + <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> | ||
| 74 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> | ||
| 75 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> | ||
| 76 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> | ||
| 77 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> | ||
| 78 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> | ||
| 79 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> | ||
| 80 | + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> | ||
| 81 | + <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> | ||
| 82 | + <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> | ||
| 83 | + <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> | ||
| 84 | + <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> | ||
| 85 | + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> | ||
| 86 | + <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> | ||
| 87 | + <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> | ||
| 88 | + <excludeFolder url="file://$MODULE_DIR$/build" /> | ||
| 89 | + </content> | ||
| 90 | + <orderEntry type="jdk" jdkName="Android API 30 Platform" jdkType="Android SDK" /> | ||
| 91 | + <orderEntry type="sourceFolder" forTests="false" /> | ||
| 92 | + <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" /> | ||
| 93 | + <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" /> | ||
| 94 | + <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" /> | ||
| 95 | + <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" /> | ||
| 96 | + <orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" /> | ||
| 97 | + <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" /> | ||
| 98 | + <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" /> | ||
| 99 | + <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" /> | ||
| 100 | + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.ext:junit:1.1.0@aar" level="project" /> | ||
| 101 | + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-core:3.1.1@aar" level="project" /> | ||
| 102 | + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:runner:1.1.1@aar" level="project" /> | ||
| 103 | + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:core:1.1.0@aar" level="project" /> | ||
| 104 | + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:monitor:1.1.1@aar" level="project" /> | ||
| 105 | + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-idling-resource:3.1.1@aar" level="project" /> | ||
| 106 | + <orderEntry type="library" name="Gradle: __local_aars__:/Users/guangka123/Documents/pool_sdk/Android/public_sdk_code_android/public_sdk_code_android/GameResAes/app/libs/commonAes.jar:unspecified@jar" level="project" /> | ||
| 107 | + <orderEntry type="library" name="Gradle: androidx.collection:collection:1.0.0@jar" level="project" /> | ||
| 108 | + <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0@jar" level="project" /> | ||
| 109 | + <orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.0.0@jar" level="project" /> | ||
| 110 | + <orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" /> | ||
| 111 | + <orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout-solver:1.1.3@jar" level="project" /> | ||
| 112 | + <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.0.2@aar" level="project" /> | ||
| 113 | + <orderEntry type="library" name="Gradle: androidx.fragment:fragment:1.0.0@aar" level="project" /> | ||
| 114 | + <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.0.0@aar" level="project" /> | ||
| 115 | + <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0@aar" level="project" /> | ||
| 116 | + <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0@aar" level="project" /> | ||
| 117 | + <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable:1.0.1@aar" level="project" /> | ||
| 118 | + <orderEntry type="library" name="Gradle: androidx.loader:loader:1.0.0@aar" level="project" /> | ||
| 119 | + <orderEntry type="library" name="Gradle: androidx.viewpager:viewpager:1.0.0@aar" level="project" /> | ||
| 120 | + <orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.0.0@aar" level="project" /> | ||
| 121 | + <orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" /> | ||
| 122 | + <orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout:1.0.0@aar" level="project" /> | ||
| 123 | + <orderEntry type="library" name="Gradle: androidx.customview:customview:1.0.0@aar" level="project" /> | ||
| 124 | + <orderEntry type="library" name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout:1.0.0@aar" level="project" /> | ||
| 125 | + <orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar" level="project" /> | ||
| 126 | + <orderEntry type="library" name="Gradle: androidx.core:core:1.0.1@aar" level="project" /> | ||
| 127 | + <orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.0.0@aar" level="project" /> | ||
| 128 | + <orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0@aar" level="project" /> | ||
| 129 | + <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.0.0@aar" level="project" /> | ||
| 130 | + <orderEntry type="library" name="Gradle: androidx.documentfile:documentfile:1.0.0@aar" level="project" /> | ||
| 131 | + <orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar" level="project" /> | ||
| 132 | + <orderEntry type="library" name="Gradle: androidx.print:print:1.0.0@aar" level="project" /> | ||
| 133 | + <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.0.0@aar" level="project" /> | ||
| 134 | + <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.0.0@aar" level="project" /> | ||
| 135 | + <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar" level="project" /> | ||
| 136 | + <orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.0.0@aar" level="project" /> | ||
| 137 | + <orderEntry type="library" name="Gradle: androidx.interpolator:interpolator:1.0.0@aar" level="project" /> | ||
| 138 | + <orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout:1.1.3@aar" level="project" /> | ||
| 139 | + </component> | ||
| 140 | +</module> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
doc/aes资源解密资料/GameResAes/app/build.gradle
0 → 100644
| 1 | +apply plugin: 'com.android.application' | ||
| 2 | + | ||
| 3 | +android { | ||
| 4 | + signingConfigs { | ||
| 5 | + release { | ||
| 6 | + storeFile file('/Users/guangka123/Documents/pool_sdk/关卡资料/guangka.keystore') | ||
| 7 | + storePassword 'guangka2019' | ||
| 8 | + keyAlias = 'guangka' | ||
| 9 | + keyPassword 'guangka2019' | ||
| 10 | + } | ||
| 11 | + } | ||
| 12 | + compileSdkVersion 30 | ||
| 13 | + buildToolsVersion "30.0.3" | ||
| 14 | + defaultConfig { | ||
| 15 | + applicationId "com.common.ndk.aes" | ||
| 16 | + minSdkVersion 19 | ||
| 17 | + targetSdkVersion 28 | ||
| 18 | + versionCode 1 | ||
| 19 | + versionName "1.0" | ||
| 20 | + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||
| 21 | + signingConfig signingConfigs.release | ||
| 22 | + } | ||
| 23 | + buildTypes { | ||
| 24 | + release { | ||
| 25 | + minifyEnabled false | ||
| 26 | + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | ||
| 27 | + } | ||
| 28 | + } | ||
| 29 | + sourceSets { | ||
| 30 | + main{ | ||
| 31 | + jniLibs.srcDirs = ['libs'] | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +dependencies { | ||
| 37 | + implementation fileTree(dir: 'libs', include: ['*.jar','*.aar']) | ||
| 38 | + implementation 'androidx.appcompat:appcompat:1.0.2' | ||
| 39 | + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' | ||
| 40 | + testImplementation 'junit:junit:4.12' | ||
| 41 | + androidTestImplementation 'androidx.test.ext:junit:1.1.0' | ||
| 42 | + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' | ||
| 43 | +} |
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
| 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 |
doc/aes资源解密资料/GameResAes/app/src/androidTest/java/com/common/ndk/aes/ExampleInstrumentedTest.java
0 → 100644
| 1 | +package com.common.ndk.aes; | ||
| 2 | + | ||
| 3 | +import android.content.Context; | ||
| 4 | + | ||
| 5 | +import androidx.test.platform.app.InstrumentationRegistry; | ||
| 6 | +import androidx.test.ext.junit.runners.AndroidJUnit4; | ||
| 7 | + | ||
| 8 | +import org.junit.Test; | ||
| 9 | +import org.junit.runner.RunWith; | ||
| 10 | + | ||
| 11 | +import static org.junit.Assert.*; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * Instrumented test, which will execute on an Android device. | ||
| 15 | + * | ||
| 16 | + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> | ||
| 17 | + */ | ||
| 18 | +@RunWith(AndroidJUnit4.class) | ||
| 19 | +public class ExampleInstrumentedTest { | ||
| 20 | + @Test | ||
| 21 | + public void useAppContext() { | ||
| 22 | + // Context of the app under test. | ||
| 23 | + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); | ||
| 24 | + | ||
| 25 | + assertEquals("com.common.ndk.aes", appContext.getPackageName()); | ||
| 26 | + } | ||
| 27 | +} |
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + package="com.common.ndk.aes"> | ||
| 4 | + | ||
| 5 | + <uses-permission android:name="android.permission.INTERNET"></uses-permission> | ||
| 6 | + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> | ||
| 7 | + | ||
| 8 | + <application | ||
| 9 | + android:allowBackup="true" | ||
| 10 | + android:icon="@mipmap/ic_launcher" | ||
| 11 | + android:label="@string/app_name" | ||
| 12 | + android:roundIcon="@mipmap/ic_launcher_round" | ||
| 13 | + android:supportsRtl="true" | ||
| 14 | + android:theme="@style/AppTheme"> | ||
| 15 | + <activity android:name=".MainActivity"> | ||
| 16 | + <intent-filter> | ||
| 17 | + <action android:name="android.intent.action.MAIN" /> | ||
| 18 | + | ||
| 19 | + <category android:name="android.intent.category.LAUNCHER" /> | ||
| 20 | + </intent-filter> | ||
| 21 | + </activity> | ||
| 22 | + </application> | ||
| 23 | + | ||
| 24 | +</manifest> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
No preview for this file type
No preview for this file type
No preview for this file type
| 1 | +<!DOCTYPE HTML> | ||
| 2 | +<html> | ||
| 3 | + | ||
| 4 | +<head> | ||
| 5 | + <meta charset="utf-8"> | ||
| 6 | + <title>Rose</title> | ||
| 7 | + <meta name="viewport" content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" /> | ||
| 8 | + <meta HTTP-EQUIV="pragma" CONTENT="no-cache"> | ||
| 9 | + <meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> | ||
| 10 | + <meta HTTP-EQUIV="expires" CONTENT="0"> | ||
| 11 | + <meta name="apple-mobile-web-app-capable" content="yes" /> | ||
| 12 | + | ||
| 13 | + <meta name="full-screen" content="true" /> | ||
| 14 | + <meta name="screen-orientation" content="portrait" /> | ||
| 15 | + <meta name="full-screen" content="yes"> | ||
| 16 | + <meta name="x5-orientation" content="portrait" /> | ||
| 17 | + <meta name="x5-fullscreen" content="true" /> | ||
| 18 | + <meta name="360-fullscreen" content="true" /> | ||
| 19 | + <link href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/nLANavu4AAAAAXRSTlMAQObYZgAAAClJREFUCNdjgAD7AyBkcIDBDIwMbjDYgxGDBAPjDwbGXwwMTAwMfECFAAX+Ci3rHRySAAAAAElFTkSuQmCC" rel="shortcut icon" type="image/png" /> | ||
| 20 | + <style> | ||
| 21 | + html,body{ height:100%;width:100%;margin: 0;padding: 0;} | ||
| 22 | + #box{ background-size: 100% 100%; background-color: #e9e5f3 } | ||
| 23 | + #loadingUi,#loginUI,#bg{width:100%;height:100%;position:absolute; overflow:hidden;} | ||
| 24 | + #loadBox,#loginBg{background-repeat:no-repeat; background-position: center center;margin:0 auto; position: relative;background-size:100% auto;} | ||
| 25 | + .loadingContainer{ width: 100%; position: absolute; bottom: 40px; } | ||
| 26 | + .loadingContainer p{display: block;width: 100%;text-align: center; margin: 0; color: #ffffff; font-style: 24px; font-weight: 600;} | ||
| 27 | + .loadingContainer .orange{color:#f3cc95} | ||
| 28 | + .loadingContainer .loading-progress{width: 80%;margin:0 auto; height:0.6em;background:rgb(97, 97, 97); | ||
| 29 | + border-radius:0.6em; | ||
| 30 | + -webkit-border-radius:0.6em; | ||
| 31 | + -moz-border-radius:0.6em;} | ||
| 32 | + .loadingContainer .loading-progress-bar{width:99%;height:0.3em;margin:0 auto;margin-left:0em;} | ||
| 33 | + .loadingContainer .loading-progress-finish{width:98%;height:0.6em;background:rgb(189, 17, 17);margin-top:0.02em; | ||
| 34 | + border-radius:0.6em; | ||
| 35 | + -webkit-border-radius:0.6em; | ||
| 36 | + -moz-border-radius:0.6em; | ||
| 37 | + } | ||
| 38 | + </style> | ||
| 39 | +<script> | ||
| 40 | + window.maxProportion = 20 / 9; | ||
| 41 | + window.minProportion = 16 / 9; | ||
| 42 | + | ||
| 43 | + function getParam(url, name) { | ||
| 44 | + var reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i"); | ||
| 45 | + if (reg.test(url)) return unescape(RegExp.$2.replace(/\+/g, " ")); | ||
| 46 | + return ""; | ||
| 47 | + } | ||
| 48 | + var origin = window.location.href; | ||
| 49 | + var hostname = window.location.hostname; | ||
| 50 | + | ||
| 51 | + //判断是否是玩吧平台,重写url地址 | ||
| 52 | + if (hostname.indexOf("urlshare.cn") > 0) { | ||
| 53 | + origin = document.getElementsByTagName("base")[0].href; | ||
| 54 | + window.maxProportion = getParam(origin, "adaptive_max") / 9; | ||
| 55 | + window.minProportion = getParam(origin, "adaptive_min") / 9; | ||
| 56 | + } | ||
| 57 | + window['param'] = origin; | ||
| 58 | + // var isNative = getParam(origin, "n") == "1"; | ||
| 59 | + // if(!isNative){ | ||
| 60 | + var platform = getParam(origin, "p"); | ||
| 61 | + if(platform == "hw") { | ||
| 62 | + document.write('<script src="https://static.hk-public.sdk.guangkatf.com/h5_sdk/guangkaH5SDKHK.js?' + new Date().getTime() + '"><\/script>') | ||
| 63 | + } else { | ||
| 64 | + document.write('<script src="https://static.public.sdk.guangkatf.com/h5_sdk/guangkaH5SDK.js?' + new Date().getTime() + '"><\/script>') | ||
| 65 | + } | ||
| 66 | + // } | ||
| 67 | + | ||
| 68 | + // 接入大数据上报 | ||
| 69 | + if (platform == "hw") { | ||
| 70 | + document.write('<script src="https://rose-cdn.inherveins.com/js/gkdata.min.js"><\/script>') | ||
| 71 | + } else { | ||
| 72 | + document.write('<script src="https://static.public.sdk.guangkatf.com/h5_sdk/gksa/gkdata.min.js"><\/script>') | ||
| 73 | + } | ||
| 74 | +</script> | ||
| 75 | +</head> | ||
| 76 | + | ||
| 77 | +<body id="box"> | ||
| 78 | + <div id="bg"> | ||
| 79 | + <div id="bgLeft" style="height: 100%; float: left; background-size: auto 100%; background-position-x: left; background-repeat: no-repeat;transform: scale(-1,1); "></div> | ||
| 80 | +<div id="bgRight" style="height: 100%; width: auto; float: right;background-size: auto 100%; background-position-x: left;background-repeat: no-repeat "></div> | ||
| 81 | +</div> | ||
| 82 | +<div id="loadingUi" style="display: none"> | ||
| 83 | +<div id="loadBox"> | ||
| 84 | + <div class="loadingContainer"> | ||
| 85 | + <p class="loadText"></p> | ||
| 86 | + <div class="loading-progress"> | ||
| 87 | + <div class="loading-progress-bar"> | ||
| 88 | + <div class="loading-progress-finish" id='loadingBar'></div> | ||
| 89 | + </div> | ||
| 90 | + </div> | ||
| 91 | + <p class="tipText"></p> | ||
| 92 | + </div> | ||
| 93 | +</div> | ||
| 94 | +</div> | ||
| 95 | +<div id="loginUI"> | ||
| 96 | + <div id="loginBg" style="display: none;"/></div> | ||
| 97 | +</div> | ||
| 98 | +<img id="loginImg" style=" display: none" /> | ||
| 99 | +<div style="margin: auto;width: 100%;height: 100%;" class="egret-player" data-entry-class="game.Main" data-orientation="auto" data-scale-mode="fixedWidth" data-resolution-mode="retina" | ||
| 100 | +data-frame-rate="30" data-content-width="640" data-content-height="1136" data-show-paint-rect="false" data-multi-fingered="2" | ||
| 101 | +data-show-fps="false" data-show-log="false" data-show-fps-style="x:2,y:2,size:16,textColor:0xffffff,bgAlpha:0.9"> | ||
| 102 | +</div> | ||
| 103 | +<script> | ||
| 104 | + if (/Android/gi.test(navigator.userAgent)) { | ||
| 105 | + // 检测userAgent是否为Android | ||
| 106 | + window.addEventListener('resize', function () { | ||
| 107 | + if (document.activeElement.tagName == 'INPUT' || document.activeElement.tagName == 'TEXTAREA') { | ||
| 108 | + // 判断当前active的元素是否为input/ textarea | ||
| 109 | + window.setTimeout(function () { | ||
| 110 | + document.activeElement.scrollIntoViewIfNeeded() | ||
| 111 | + // 原生方法,滚动至需要显示的位置 | ||
| 112 | + }, 0) | ||
| 113 | + } | ||
| 114 | + }); | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + var bgWidth = 640; | ||
| 118 | + var bgHeight = 1800; | ||
| 119 | + var loaded = 0; | ||
| 120 | + var total = 0; | ||
| 121 | + var isNativePackage = getParam(origin, "np") == "1"; | ||
| 122 | + var isZip = /[A-Za-z]/.test(window.location.hostname) || isNativePackage; | ||
| 123 | + var channel = getParam(origin, "c"); | ||
| 124 | + var isNative = getParam(origin, "n") == "1"; | ||
| 125 | + var inner = getParam(origin, "i"); | ||
| 126 | + var isH5Sdk = isZip && !isNative && inner == ""; | ||
| 127 | + var channelData = null; | ||
| 128 | + window["isZip"] = isZip; | ||
| 129 | + window["cdnResData"] = null; //CDN资源 | ||
| 130 | + | ||
| 131 | + window["isLogin"] = false; | ||
| 132 | + window["loginInfo"] = { | ||
| 133 | + "ip": "", //ip | ||
| 134 | + "networkType": "", //网络类型 | ||
| 135 | + "openId": "", //用户ID | ||
| 136 | + "brand": "", //用户机型 | ||
| 137 | + "id": new Date().getTime(), //开始时间 | ||
| 138 | + "initSdk": 0, //SDK | ||
| 139 | + "initChanel": 0, //chanel | ||
| 140 | + "loadSubpackage": 0, // 分包 | ||
| 141 | + "loadJson": 0, // 加载配置表 | ||
| 142 | + "loadRES": 0, // 加载登录资源 | ||
| 143 | + "connectGate": 0,//连接网关 | ||
| 144 | + "connectServer": 0, //连接服务器 | ||
| 145 | + "errorContent": [] //登录过程中错误信息 | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + if (isNative) { | ||
| 149 | + window.minProportion = 14.9 / 9; //兼容到16:9的安卓机但是有导航条 | ||
| 150 | + } | ||
| 151 | + if (isH5Sdk) { | ||
| 152 | + loadH5Sdk(); | ||
| 153 | + } else { | ||
| 154 | + recordLoginInfo("initSdk") | ||
| 155 | + recordLoginInfo("initChanel") | ||
| 156 | + var v = getParam(origin, "v"); | ||
| 157 | + if (v != "") { | ||
| 158 | + if (origin.indexOf('?') >= 0) { | ||
| 159 | + origin += '&v=' + v; | ||
| 160 | + } else { | ||
| 161 | + origin += '?v=' + v; | ||
| 162 | + } | ||
| 163 | + } | ||
| 164 | + openJson(v, openGame); | ||
| 165 | + } | ||
| 166 | + window.onerror = function (errorMessage, scriptURI, lineNumber, columnNumber, errorObj) { | ||
| 167 | + if (game && game.ErrorMgr) { | ||
| 168 | + game.ErrorMgr.inst.addError("window.onerror", errorMessage, errorObj); | ||
| 169 | + } | ||
| 170 | + recordLoginInfo("errorContent", errorObj) | ||
| 171 | + } | ||
| 172 | + function setLoadView() { | ||
| 173 | + var sW = document.body.clientWidth; | ||
| 174 | + var sH = document.body.clientHeight; | ||
| 175 | + var marginTop = 0; | ||
| 176 | + var clientProportion = sH / sW; | ||
| 177 | + if (clientProportion >= window.maxProportion) { | ||
| 178 | + sH = window.maxProportion * sW; | ||
| 179 | + marginTop = (document.body.clientHeight - sH) / 2; | ||
| 180 | + } else if (clientProportion <= window.minProportion) { | ||
| 181 | + sW = sH / window.minProportion; | ||
| 182 | + } | ||
| 183 | + if (document.getElementById("loadBox")) { | ||
| 184 | + document.getElementById("loadBox").style.width = sW + "px"; | ||
| 185 | + document.getElementById("loadBox").style.height = sH + "px"; | ||
| 186 | + if (bgHeight / bgWidth <= sH / sW) { | ||
| 187 | + document.getElementById("loadBox").style.backgroundSize = "100% 100%"; | ||
| 188 | + } | ||
| 189 | + document.getElementById("loadBox").style.marginTop = marginTop + "px"; | ||
| 190 | + } | ||
| 191 | + if (document.getElementById("loginBg")) { | ||
| 192 | + document.getElementById("loginBg").style.width = sW + "px"; | ||
| 193 | + document.getElementById("loginBg").style.height = sH + "px"; | ||
| 194 | + if (bgHeight / bgWidth <= sH / sW) { | ||
| 195 | + document.getElementById("loginBg").style.backgroundSize = "100% 100%"; | ||
| 196 | + } | ||
| 197 | + document.getElementById("loginBg").style.marginTop = marginTop + "px"; | ||
| 198 | + } | ||
| 199 | + document.getElementById("bgLeft").style.width = (document.body.clientWidth - sW) / 2 + "px" | ||
| 200 | + document.getElementById("bgRight").style.width = (document.body.clientWidth - sW) / 2 + "px" | ||
| 201 | + } | ||
| 202 | + function openJson(v, callback) { | ||
| 203 | + if (v == "") { | ||
| 204 | + callback(); | ||
| 205 | + } else { | ||
| 206 | + var xhr = new XMLHttpRequest(); | ||
| 207 | + var url = origin.split("index")[0] + v + "/"; | ||
| 208 | + if(isNativePackage){ | ||
| 209 | + url = getParam(origin, "cdn") + "/" + v + "/"; | ||
| 210 | + } | ||
| 211 | + xhr.open('GET', url + v + '.json?v=' + Math.random(), true); | ||
| 212 | + xhr.addEventListener("load", function () { | ||
| 213 | + window["cdnResData"] = JSON.parse(xhr.response); | ||
| 214 | + callback(); | ||
| 215 | + }); | ||
| 216 | + xhr.send(null); | ||
| 217 | + } | ||
| 218 | + } | ||
| 219 | + function openGame() { | ||
| 220 | + console.warn("openGame:" + Date.now()); | ||
| 221 | + var baseUrl = "http://rose-cdn.hnwanqi.cn/rose/art/"; | ||
| 222 | + if (platform == "hw") { | ||
| 223 | + baseUrl = "https://rose-cdn.inherveins.com/rose/art/"; | ||
| 224 | + } | ||
| 225 | + console.warn("baseUrl:" + baseUrl); | ||
| 226 | + var bgImg = baseUrl + "loading.jpg"; | ||
| 227 | + var loginBg = bgImg; | ||
| 228 | + document.getElementById("bgLeft").style.backgroundImage = "url(" + baseUrl + "bg_2.jpg)"; | ||
| 229 | + document.getElementById("bgRight").style.backgroundImage = "url(" + baseUrl + "bg_2.jpg)"; | ||
| 230 | + setLoadView(); | ||
| 231 | + if (channelData && channelData.res_url) { | ||
| 232 | + var resData = JSON.parse(channelData.res_url); | ||
| 233 | + bgImg = resData.loading || bgImg; | ||
| 234 | + loginBg = resData.login || loginBg; | ||
| 235 | + } | ||
| 236 | + | ||
| 237 | + window.onresize = setLoadView; | ||
| 238 | + document.getElementById("loadingUi").style.display = "block"; | ||
| 239 | + document.getElementsByClassName("loadText")[0].innerHTML = "Loading resources, please wait..."; | ||
| 240 | + // document.getElementsByClassName("tipText")[0].innerHTML = '<span class="orange">开启音效</span><span>可获得更好的游戏体验</span>'; | ||
| 241 | + if (isNative) { | ||
| 242 | + document.getElementById("loadBox").style.display = "none"; | ||
| 243 | + } else { | ||
| 244 | + document.getElementById("loadBox").style.backgroundImage = "url(" + bgImg + ")"; | ||
| 245 | + document.getElementById("loginBg").style.backgroundImage = "url(" + loginBg + ")"; | ||
| 246 | + } | ||
| 247 | + | ||
| 248 | + var xhr = new XMLHttpRequest(); | ||
| 249 | + xhr.open('GET', './manifest.json?v=' + Math.random(), true); | ||
| 250 | + xhr.addEventListener("load", function () { | ||
| 251 | + var manifest = JSON.parse(xhr.response); | ||
| 252 | + var list = manifest.initial.concat(manifest.game); | ||
| 253 | + total = list.length; | ||
| 254 | + loadScript(list, function () { | ||
| 255 | + recordLoginInfo("loadSubpackage") | ||
| 256 | + var dqScreenAdapter = new ScreenAdapter(); | ||
| 257 | + egret.runEgret({ renderMode: "webgl", audioType: 2, screenAdapter: dqScreenAdapter }); | ||
| 258 | + }); | ||
| 259 | + }); | ||
| 260 | + xhr.send(null); | ||
| 261 | + } | ||
| 262 | + function loadScript(list, callback) { | ||
| 263 | + var jsList = []; | ||
| 264 | + var zipList = []; | ||
| 265 | + for (i = 0; i < list.length; i++) { | ||
| 266 | + var fileName = list[i]; | ||
| 267 | + if (!isZip || fileName == "js/zip.min.js") { | ||
| 268 | + jsList.push(getFileUrl(fileName)); | ||
| 269 | + } else { | ||
| 270 | + zipList.push(fileName.split("/").pop()); | ||
| 271 | + } | ||
| 272 | + } | ||
| 273 | + loadSingleScript(jsList, 0, function () { | ||
| 274 | + if (zipList.length <= 0) { callback(); return; } | ||
| 275 | + new unZip().onStart(getFileUrl("resource/zip/js.zip"), zipList, function () { | ||
| 276 | + showLoadingBar(); | ||
| 277 | + }, function () { | ||
| 278 | + callback(); | ||
| 279 | + }); | ||
| 280 | + }); | ||
| 281 | + }; | ||
| 282 | + /** 获取真实的资源地址 */ | ||
| 283 | + function getFileUrl(key) { | ||
| 284 | + var resList = window["cdnResData"]; | ||
| 285 | + if (!resList || isNativePackage) { | ||
| 286 | + return key; | ||
| 287 | + } else { | ||
| 288 | + if (key.indexOf("resource") >= 0) { | ||
| 289 | + return resList[key.replace("resource", "")] + "/" + key; | ||
| 290 | + } | ||
| 291 | + } | ||
| 292 | + return resList[key] + "/" + key; | ||
| 293 | + } | ||
| 294 | + function showLoadingBar() { | ||
| 295 | + loaded++; | ||
| 296 | + Math.min(loaded, total); | ||
| 297 | + var loadingBarDom = document.getElementById("loadingBar"); | ||
| 298 | + if (loadingBarDom) { | ||
| 299 | + loadingBarDom.style.width = Math.ceil((loaded / total) * 102) + "%" | ||
| 300 | + } | ||
| 301 | + } | ||
| 302 | + function loadSingleScript(list, index, callback) { | ||
| 303 | + if (list.length <= index) { callback(); return; } | ||
| 304 | + var s = document.createElement('script'); | ||
| 305 | + var src = list[index]; | ||
| 306 | + s.async = false; | ||
| 307 | + | ||
| 308 | + var origin = window.location.href; | ||
| 309 | + var isCache = true; | ||
| 310 | + if (origin.indexOf("cache=0") >= 0) | ||
| 311 | + isCache = false | ||
| 312 | + if (isCache) { | ||
| 313 | + s.src = src; | ||
| 314 | + } else { | ||
| 315 | + s.src = src + '?' + new Date().getTime(); | ||
| 316 | + } | ||
| 317 | + var _index = index + 1; | ||
| 318 | + s.addEventListener('load', function () { | ||
| 319 | + s.parentNode.removeChild(s); | ||
| 320 | + s.removeEventListener('load', arguments.callee, false); | ||
| 321 | + showLoadingBar(); | ||
| 322 | + loadSingleScript(list, _index, callback); | ||
| 323 | + }, false); | ||
| 324 | + document.body.appendChild(s); | ||
| 325 | + }; | ||
| 326 | + function getParam(url, name) { | ||
| 327 | + var reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i"); | ||
| 328 | + if (reg.test(url)) return unescape(RegExp.$2.replace(/\+/g, " ")); | ||
| 329 | + return ""; | ||
| 330 | + }; | ||
| 331 | + | ||
| 332 | + function loadH5Sdk() { | ||
| 333 | + var youaiH5SDK = window["youaiH5SDK"]; | ||
| 334 | + var callback = function (code, msg) { | ||
| 335 | + switch (code) { | ||
| 336 | + case youaiH5SDK.code.INIT_SUCCESS: | ||
| 337 | + recordLoginInfo("initSdk") | ||
| 338 | + // youaiH5SDK.getParamValueByKey("custom"); | ||
| 339 | + channel = youaiH5SDK.getParamValueByKey("channelId"); | ||
| 340 | + var url = youaiH5SDK.getParamValueByKey("channelParameter1"); | ||
| 341 | + window["channel"] = channel; | ||
| 342 | + requestInitData(url, channel, null); | ||
| 343 | + break; | ||
| 344 | + case youaiH5SDK.code.LOGIN_SUCCESS: | ||
| 345 | + var params = { | ||
| 346 | + userType: msg.userType, | ||
| 347 | + openId: msg.openId, | ||
| 348 | + timestamp: msg.timestamp, | ||
| 349 | + serverSign: msg.serverSign, | ||
| 350 | + channel: youaiH5SDK.getParamValueByKey("channelId") | ||
| 351 | + } | ||
| 352 | + game.JSBridge.loginResult(params); | ||
| 353 | + /**拓展接口 | ||
| 354 | + * has_micro_client:0,//是否有微端 0:没有,1:有,2已经在微端中 | ||
| 355 | + is_share:0,//是否有分享接口 0:没有,1:有 | ||
| 356 | + is_focus:0,//是否有关注 0:没,1:有,2:已经关注 | ||
| 357 | + is_apple_pay:0,//是否开启苹果支付 0:不开启 1:开启 | ||
| 358 | + is_desktop:0,//是否有保存桌面 0:没有 1:有 | ||
| 359 | + is_switch_account:0,//是否有切换账号 0:没有 1有 | ||
| 360 | + is_realverify:0,//是否有实名认证 0:没有 1:有 2:已认证 | ||
| 361 | + is_super_kefu:0,//是否有超级客服 0:没 1:有 | ||
| 362 | + is_backtogame:0,//是否有返回按钮 0:没有,1:有 | ||
| 363 | + is_lock:0,//是否竖屏 0:研发默认样式 1:强制竖屏 | ||
| 364 | + is_focus_gift:0,//关注有礼 0:关闭 1:开启 | ||
| 365 | + is_bindphone:0//绑定手机 0:关闭 1:开启 2:已绑定手机 | ||
| 366 | + is_msgseccheck: 0, //违规内容判断接口 0:没有,1:有 | ||
| 367 | + is_checkbalance: 0,//是否有查询 0:没有,1:有 | ||
| 368 | + is_showad: 0,//是否有广告接口 0:没有,1:有 | ||
| 369 | + is_kefu: 0,//是否有客服 0:没有,1:有(调用对应的客服类型接口(kefu)) | ||
| 370 | + is_score: 0,//是否有评分接口 0:没有,1:有(调用对应的评分类型接口(score)) | ||
| 371 | + is_query_products_info: 0,//是否有查询商品信息接口 0,没有 1:有(调用对应的查询商品信息接口(queryProductsInfo)) | ||
| 372 | + is_event_track: 0// 0:没有 1:有 是否有事件上报接口 | ||
| 373 | + */ | ||
| 374 | + youaiH5SDK.expansionInterface(youaiH5SDK.expansion_type.gameSetting, "", function (result) { | ||
| 375 | + console.log("gameSetting:", result); | ||
| 376 | + if (result.code == 0) { | ||
| 377 | + game.ParamMgr.inst.setSettingData(result.data); | ||
| 378 | + } | ||
| 379 | + }); | ||
| 380 | + break; | ||
| 381 | + case youaiH5SDK.code.LOGOUT_SUCCESS: | ||
| 382 | + break; | ||
| 383 | + case youaiH5SDK.code.SWITCH_SUCCESS: | ||
| 384 | + break; | ||
| 385 | + case youaiH5SDK.code.PAY_SUCCESS: | ||
| 386 | + break; | ||
| 387 | + case youaiH5SDK.code.EXIT_SUCCESS: | ||
| 388 | + break; | ||
| 389 | + } | ||
| 390 | + } | ||
| 391 | + youaiH5SDK.init(callback); | ||
| 392 | + } | ||
| 393 | + | ||
| 394 | + // 请求初始化数据 | ||
| 395 | + function requestInitData(url, channel, cb) { | ||
| 396 | + var staticUrl = url + "/server/" + channel + "/channel.json?" + new Date().getTime(); | ||
| 397 | + console.log("initSuccess... origin:", origin, "url:", url, "channel:", channel); | ||
| 398 | + var xhr = new XMLHttpRequest(); | ||
| 399 | + xhr.open('GET', staticUrl, false); | ||
| 400 | + xhr.addEventListener("load", function () { | ||
| 401 | + recordLoginInfo("initChanel") | ||
| 402 | + var data = xhr.response; | ||
| 403 | + channelData = JSON.parse(data); | ||
| 404 | + window["initData"] = data; | ||
| 405 | + window["version"] = channelData.version; | ||
| 406 | + cb && cb(channelData); | ||
| 407 | + openJson(channelData.version, openGame); | ||
| 408 | + }); | ||
| 409 | + xhr.send(null); | ||
| 410 | + } | ||
| 411 | + | ||
| 412 | + /** 游戏登录过程打点 | ||
| 413 | + * "id": new Date().getTime(), | ||
| 414 | + "initSdk": 0, //SDK | ||
| 415 | + "initChanel": 0, //chanel | ||
| 416 | + "loadSubpackage": 0, // 分包 | ||
| 417 | + "loadJson": 0, // 加载配置表 | ||
| 418 | + "loadRES": 0, // 加载登录资源 | ||
| 419 | + "connectGate": 0,//连接网关 | ||
| 420 | + "connectServer": 0, //连接服务器 | ||
| 421 | + "errorContent": [] //登录过程中错误信息 | ||
| 422 | + */ | ||
| 423 | + function recordLoginInfo(key, value) { | ||
| 424 | + try { | ||
| 425 | + if (window["isLogin"]) return; | ||
| 426 | + if (value === void 0) { value = new Date().getTime() } | ||
| 427 | + if (key != "errorContent") { | ||
| 428 | + window["loginInfo"][key] = value; | ||
| 429 | + } else { | ||
| 430 | + window["loginInfo"][key].push(value); | ||
| 431 | + } | ||
| 432 | + var loginInfo = localStorage.getItem("loginInfo"); | ||
| 433 | + var loginInfoArr = !loginInfo ? [] : JSON.parse(loginInfo); | ||
| 434 | + if (loginInfoArr.length >= 10) return; //超过10条就不存了 | ||
| 435 | + if (key == "initSdk") { | ||
| 436 | + loginInfoArr.push(window["loginInfo"]); | ||
| 437 | + } else { | ||
| 438 | + if (loginInfoArr.length <= 0) return; | ||
| 439 | + loginInfoArr[loginInfoArr.length - 1] = window["loginInfo"] | ||
| 440 | + } | ||
| 441 | + localStorage.setItem("loginInfo", JSON.stringify(loginInfoArr)); | ||
| 442 | + } catch (error) { | ||
| 443 | + } | ||
| 444 | + } | ||
| 445 | +</script> | ||
| 446 | +</body> | ||
| 447 | + | ||
| 448 | +</html> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
This diff could not be displayed because it is too large.
| 1 | +{ | ||
| 2 | + "initial": [ | ||
| 3 | + "js/egret.min.js", | ||
| 4 | + "js/egret.web.min.js", | ||
| 5 | + "js/eui.min.js", | ||
| 6 | + "js/assetsmanager.min.js", | ||
| 7 | + "js/tween.min.js", | ||
| 8 | + "js/socket.min.js", | ||
| 9 | + "js/game.min.js", | ||
| 10 | + "js/promise.min.js", | ||
| 11 | + "js/dragonBones.min.js" | ||
| 12 | + ], | ||
| 13 | + "game": [ | ||
| 14 | + "js/zip.min.js", | ||
| 15 | + "js/lib.min.js", | ||
| 16 | + "js/main.min.js", | ||
| 17 | + "js/default.thm.min.js" | ||
| 18 | + ] | ||
| 19 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +package com.common.ndk.aes; | ||
| 2 | + | ||
| 3 | +import android.os.Bundle; | ||
| 4 | +import android.os.Environment; | ||
| 5 | +import android.view.View; | ||
| 6 | + | ||
| 7 | +import androidx.appcompat.app.AppCompatActivity; | ||
| 8 | + | ||
| 9 | +import com.common.crypt.moudle.CryptCallBack; | ||
| 10 | +import com.common.crypt.moudle.CryptInterface; | ||
| 11 | +import com.common.ndk.aes.utils.CommonLog; | ||
| 12 | + | ||
| 13 | +import java.io.File; | ||
| 14 | + | ||
| 15 | +public class MainActivity extends AppCompatActivity { | ||
| 16 | + | ||
| 17 | + static { | ||
| 18 | + System.loadLibrary("common-sdk"); | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + @Override | ||
| 22 | + protected void onCreate(Bundle savedInstanceState) { | ||
| 23 | + super.onCreate(savedInstanceState); | ||
| 24 | + setContentView(R.layout.activity_main); | ||
| 25 | + CryptInterface.init(getApplication()); | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + //将assets中res资源加密到对应到sd卡路径上 | ||
| 29 | + public void encodeAssetsFile(View view) { | ||
| 30 | + CommonLog.logDebug("encodeAssetsFile"); | ||
| 31 | + CryptInterface.encodeAssetsFilesFromDir("res", Environment.getExternalStorageDirectory() + "/gametest/encodeRes", new CryptCallBack() { | ||
| 32 | + @Override | ||
| 33 | + public void callback(int code, Object msg) { | ||
| 34 | + CommonLog.logDebug("code:" + code + " message:" + msg); | ||
| 35 | + } | ||
| 36 | + }); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + //将assets中res资源解密到对应目录上 | ||
| 40 | + public void decodeAssetsFile(View view) { | ||
| 41 | + final long currentTime = System.currentTimeMillis(); | ||
| 42 | + CryptInterface.decodeAssetsFilesFromDir("commonEncode", Environment.getExternalStorageDirectory() + "/gametest/encodeRes7", new CryptCallBack() { | ||
| 43 | + @Override | ||
| 44 | + public void callback(int code, Object msg) { | ||
| 45 | + long subTime = System.currentTimeMillis() - currentTime; | ||
| 46 | + CommonLog.logDebug("useTime:" + subTime); | ||
| 47 | + CommonLog.logDebug("code:" + code + " message:" + msg); | ||
| 48 | + } | ||
| 49 | + }); | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + //将除assets目录之前的其他目录解密到对应目录上 | ||
| 53 | + public void decodeNoAssetsFile(View view) { | ||
| 54 | + File storageDirectory = Environment.getExternalStorageDirectory(); | ||
| 55 | + String fromDir = storageDirectory + "/gametest/res"; | ||
| 56 | + String toDir = storageDirectory + "/gametest/decodeRes"; | ||
| 57 | + CryptInterface.decodeSdFilesFromDir(fromDir, toDir, new CryptCallBack() { | ||
| 58 | + @Override | ||
| 59 | + public void callback(int code, Object msg) { | ||
| 60 | + CommonLog.logDebug("code:" + code + " message:" + msg); | ||
| 61 | + } | ||
| 62 | + }); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + //将除assets目录之前的其他目录加密到对应目录上 | ||
| 66 | + public void encodeNoAssetsFile(View view) { | ||
| 67 | + File storageDirectory = Environment.getExternalStorageDirectory(); | ||
| 68 | + String fromDir = storageDirectory + "/gametest/res"; | ||
| 69 | + String toDir = storageDirectory + "/gametest/encodeRes"; | ||
| 70 | + CryptInterface.encodeSdFilesFromDir(fromDir, toDir, new CryptCallBack() { | ||
| 71 | + @Override | ||
| 72 | + public void callback(int code, Object msg) { | ||
| 73 | + CommonLog.logDebug("code:" + code + " message:" + msg); | ||
| 74 | + } | ||
| 75 | + }); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + //内容加密操作 | ||
| 79 | + public void contentAesEncode(View view) { | ||
| 80 | + CryptInterface.encode("hello123Aes".getBytes(), new CryptCallBack() { | ||
| 81 | + @Override | ||
| 82 | + public void callback(int code, Object msg) { | ||
| 83 | + if(code == CryptCallBack.success){ | ||
| 84 | + //加密成功 | ||
| 85 | + byte[] encodeResult = (byte[]) msg; | ||
| 86 | + for (byte b:encodeResult) { | ||
| 87 | + CommonLog.logDebug("b:" + b); | ||
| 88 | + } | ||
| 89 | + CommonLog.logDebug("msg:" + new String(encodeResult,0,encodeResult.length)); | ||
| 90 | + }else{ | ||
| 91 | + //加密失败 | ||
| 92 | + CommonLog.logError("encode error:" + msg); | ||
| 93 | + } | ||
| 94 | + } | ||
| 95 | + }); | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + //内容解密操作 | ||
| 99 | + public void contentAesDecode(View view) { | ||
| 100 | + byte[] decodeContent = {-31,-25,-89,40,108,-67,-41,-61,-92,-103,-104,-106,-93,38,-8,-115}; | ||
| 101 | + CryptInterface.decode(decodeContent, new CryptCallBack() { | ||
| 102 | + @Override | ||
| 103 | + public void callback(int code, Object msg) { | ||
| 104 | + if(code == CryptCallBack.success){ | ||
| 105 | + //解密成功 | ||
| 106 | + byte[] decodeResult = (byte[]) msg; | ||
| 107 | + CommonLog.logDebug("msg:" + new String(decodeResult,0,decodeResult.length)); | ||
| 108 | + }else{ | ||
| 109 | + //解密失败 | ||
| 110 | + CommonLog.logError("encode error:" + msg); | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | + }); | ||
| 114 | + } | ||
| 115 | +} |
| 1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 2 | + xmlns:aapt="http://schemas.android.com/aapt" | ||
| 3 | + android:width="108dp" | ||
| 4 | + android:height="108dp" | ||
| 5 | + android:viewportWidth="108" | ||
| 6 | + android:viewportHeight="108"> | ||
| 7 | + <path | ||
| 8 | + android:fillType="evenOdd" | ||
| 9 | + android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z" | ||
| 10 | + android:strokeWidth="1" | ||
| 11 | + android:strokeColor="#00000000"> | ||
| 12 | + <aapt:attr name="android:fillColor"> | ||
| 13 | + <gradient | ||
| 14 | + android:endX="78.5885" | ||
| 15 | + android:endY="90.9159" | ||
| 16 | + android:startX="48.7653" | ||
| 17 | + android:startY="61.0927" | ||
| 18 | + android:type="linear"> | ||
| 19 | + <item | ||
| 20 | + android:color="#44000000" | ||
| 21 | + android:offset="0.0" /> | ||
| 22 | + <item | ||
| 23 | + android:color="#00000000" | ||
| 24 | + android:offset="1.0" /> | ||
| 25 | + </gradient> | ||
| 26 | + </aapt:attr> | ||
| 27 | + </path> | ||
| 28 | + <path | ||
| 29 | + android:fillColor="#FFFFFF" | ||
| 30 | + android:fillType="nonZero" | ||
| 31 | + android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z" | ||
| 32 | + android:strokeWidth="1" | ||
| 33 | + android:strokeColor="#00000000" /> | ||
| 34 | +</vector> |
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + android:width="108dp" | ||
| 4 | + android:height="108dp" | ||
| 5 | + android:viewportWidth="108" | ||
| 6 | + android:viewportHeight="108"> | ||
| 7 | + <path | ||
| 8 | + android:fillColor="#008577" | ||
| 9 | + android:pathData="M0,0h108v108h-108z" /> | ||
| 10 | + <path | ||
| 11 | + android:fillColor="#00000000" | ||
| 12 | + android:pathData="M9,0L9,108" | ||
| 13 | + android:strokeWidth="0.8" | ||
| 14 | + android:strokeColor="#33FFFFFF" /> | ||
| 15 | + <path | ||
| 16 | + android:fillColor="#00000000" | ||
| 17 | + android:pathData="M19,0L19,108" | ||
| 18 | + android:strokeWidth="0.8" | ||
| 19 | + android:strokeColor="#33FFFFFF" /> | ||
| 20 | + <path | ||
| 21 | + android:fillColor="#00000000" | ||
| 22 | + android:pathData="M29,0L29,108" | ||
| 23 | + android:strokeWidth="0.8" | ||
| 24 | + android:strokeColor="#33FFFFFF" /> | ||
| 25 | + <path | ||
| 26 | + android:fillColor="#00000000" | ||
| 27 | + android:pathData="M39,0L39,108" | ||
| 28 | + android:strokeWidth="0.8" | ||
| 29 | + android:strokeColor="#33FFFFFF" /> | ||
| 30 | + <path | ||
| 31 | + android:fillColor="#00000000" | ||
| 32 | + android:pathData="M49,0L49,108" | ||
| 33 | + android:strokeWidth="0.8" | ||
| 34 | + android:strokeColor="#33FFFFFF" /> | ||
| 35 | + <path | ||
| 36 | + android:fillColor="#00000000" | ||
| 37 | + android:pathData="M59,0L59,108" | ||
| 38 | + android:strokeWidth="0.8" | ||
| 39 | + android:strokeColor="#33FFFFFF" /> | ||
| 40 | + <path | ||
| 41 | + android:fillColor="#00000000" | ||
| 42 | + android:pathData="M69,0L69,108" | ||
| 43 | + android:strokeWidth="0.8" | ||
| 44 | + android:strokeColor="#33FFFFFF" /> | ||
| 45 | + <path | ||
| 46 | + android:fillColor="#00000000" | ||
| 47 | + android:pathData="M79,0L79,108" | ||
| 48 | + android:strokeWidth="0.8" | ||
| 49 | + android:strokeColor="#33FFFFFF" /> | ||
| 50 | + <path | ||
| 51 | + android:fillColor="#00000000" | ||
| 52 | + android:pathData="M89,0L89,108" | ||
| 53 | + android:strokeWidth="0.8" | ||
| 54 | + android:strokeColor="#33FFFFFF" /> | ||
| 55 | + <path | ||
| 56 | + android:fillColor="#00000000" | ||
| 57 | + android:pathData="M99,0L99,108" | ||
| 58 | + android:strokeWidth="0.8" | ||
| 59 | + android:strokeColor="#33FFFFFF" /> | ||
| 60 | + <path | ||
| 61 | + android:fillColor="#00000000" | ||
| 62 | + android:pathData="M0,9L108,9" | ||
| 63 | + android:strokeWidth="0.8" | ||
| 64 | + android:strokeColor="#33FFFFFF" /> | ||
| 65 | + <path | ||
| 66 | + android:fillColor="#00000000" | ||
| 67 | + android:pathData="M0,19L108,19" | ||
| 68 | + android:strokeWidth="0.8" | ||
| 69 | + android:strokeColor="#33FFFFFF" /> | ||
| 70 | + <path | ||
| 71 | + android:fillColor="#00000000" | ||
| 72 | + android:pathData="M0,29L108,29" | ||
| 73 | + android:strokeWidth="0.8" | ||
| 74 | + android:strokeColor="#33FFFFFF" /> | ||
| 75 | + <path | ||
| 76 | + android:fillColor="#00000000" | ||
| 77 | + android:pathData="M0,39L108,39" | ||
| 78 | + android:strokeWidth="0.8" | ||
| 79 | + android:strokeColor="#33FFFFFF" /> | ||
| 80 | + <path | ||
| 81 | + android:fillColor="#00000000" | ||
| 82 | + android:pathData="M0,49L108,49" | ||
| 83 | + android:strokeWidth="0.8" | ||
| 84 | + android:strokeColor="#33FFFFFF" /> | ||
| 85 | + <path | ||
| 86 | + android:fillColor="#00000000" | ||
| 87 | + android:pathData="M0,59L108,59" | ||
| 88 | + android:strokeWidth="0.8" | ||
| 89 | + android:strokeColor="#33FFFFFF" /> | ||
| 90 | + <path | ||
| 91 | + android:fillColor="#00000000" | ||
| 92 | + android:pathData="M0,69L108,69" | ||
| 93 | + android:strokeWidth="0.8" | ||
| 94 | + android:strokeColor="#33FFFFFF" /> | ||
| 95 | + <path | ||
| 96 | + android:fillColor="#00000000" | ||
| 97 | + android:pathData="M0,79L108,79" | ||
| 98 | + android:strokeWidth="0.8" | ||
| 99 | + android:strokeColor="#33FFFFFF" /> | ||
| 100 | + <path | ||
| 101 | + android:fillColor="#00000000" | ||
| 102 | + android:pathData="M0,89L108,89" | ||
| 103 | + android:strokeWidth="0.8" | ||
| 104 | + android:strokeColor="#33FFFFFF" /> | ||
| 105 | + <path | ||
| 106 | + android:fillColor="#00000000" | ||
| 107 | + android:pathData="M0,99L108,99" | ||
| 108 | + android:strokeWidth="0.8" | ||
| 109 | + android:strokeColor="#33FFFFFF" /> | ||
| 110 | + <path | ||
| 111 | + android:fillColor="#00000000" | ||
| 112 | + android:pathData="M19,29L89,29" | ||
| 113 | + android:strokeWidth="0.8" | ||
| 114 | + android:strokeColor="#33FFFFFF" /> | ||
| 115 | + <path | ||
| 116 | + android:fillColor="#00000000" | ||
| 117 | + android:pathData="M19,39L89,39" | ||
| 118 | + android:strokeWidth="0.8" | ||
| 119 | + android:strokeColor="#33FFFFFF" /> | ||
| 120 | + <path | ||
| 121 | + android:fillColor="#00000000" | ||
| 122 | + android:pathData="M19,49L89,49" | ||
| 123 | + android:strokeWidth="0.8" | ||
| 124 | + android:strokeColor="#33FFFFFF" /> | ||
| 125 | + <path | ||
| 126 | + android:fillColor="#00000000" | ||
| 127 | + android:pathData="M19,59L89,59" | ||
| 128 | + android:strokeWidth="0.8" | ||
| 129 | + android:strokeColor="#33FFFFFF" /> | ||
| 130 | + <path | ||
| 131 | + android:fillColor="#00000000" | ||
| 132 | + android:pathData="M19,69L89,69" | ||
| 133 | + android:strokeWidth="0.8" | ||
| 134 | + android:strokeColor="#33FFFFFF" /> | ||
| 135 | + <path | ||
| 136 | + android:fillColor="#00000000" | ||
| 137 | + android:pathData="M19,79L89,79" | ||
| 138 | + android:strokeWidth="0.8" | ||
| 139 | + android:strokeColor="#33FFFFFF" /> | ||
| 140 | + <path | ||
| 141 | + android:fillColor="#00000000" | ||
| 142 | + android:pathData="M29,19L29,89" | ||
| 143 | + android:strokeWidth="0.8" | ||
| 144 | + android:strokeColor="#33FFFFFF" /> | ||
| 145 | + <path | ||
| 146 | + android:fillColor="#00000000" | ||
| 147 | + android:pathData="M39,19L39,89" | ||
| 148 | + android:strokeWidth="0.8" | ||
| 149 | + android:strokeColor="#33FFFFFF" /> | ||
| 150 | + <path | ||
| 151 | + android:fillColor="#00000000" | ||
| 152 | + android:pathData="M49,19L49,89" | ||
| 153 | + android:strokeWidth="0.8" | ||
| 154 | + android:strokeColor="#33FFFFFF" /> | ||
| 155 | + <path | ||
| 156 | + android:fillColor="#00000000" | ||
| 157 | + android:pathData="M59,19L59,89" | ||
| 158 | + android:strokeWidth="0.8" | ||
| 159 | + android:strokeColor="#33FFFFFF" /> | ||
| 160 | + <path | ||
| 161 | + android:fillColor="#00000000" | ||
| 162 | + android:pathData="M69,19L69,89" | ||
| 163 | + android:strokeWidth="0.8" | ||
| 164 | + android:strokeColor="#33FFFFFF" /> | ||
| 165 | + <path | ||
| 166 | + android:fillColor="#00000000" | ||
| 167 | + android:pathData="M79,19L79,89" | ||
| 168 | + android:strokeWidth="0.8" | ||
| 169 | + android:strokeColor="#33FFFFFF" /> | ||
| 170 | +</vector> |
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | ||
| 4 | + xmlns:tools="http://schemas.android.com/tools" | ||
| 5 | + android:layout_width="match_parent" | ||
| 6 | + android:layout_height="match_parent" | ||
| 7 | + tools:context=".MainActivity"> | ||
| 8 | + | ||
| 9 | + <Button | ||
| 10 | + android:id="@+id/button6" | ||
| 11 | + android:layout_width="320dp" | ||
| 12 | + android:layout_height="60dp" | ||
| 13 | + android:layout_marginStart="24dp" | ||
| 14 | + android:layout_marginTop="16dp" | ||
| 15 | + android:onClick="contentAesDecode" | ||
| 16 | + android:text="内容解密" | ||
| 17 | + app:layout_constraintStart_toStartOf="parent" | ||
| 18 | + app:layout_constraintTop_toBottomOf="@+id/button5" /> | ||
| 19 | + | ||
| 20 | + <Button | ||
| 21 | + android:id="@+id/button3" | ||
| 22 | + android:layout_width="326dp" | ||
| 23 | + android:layout_height="71dp" | ||
| 24 | + android:layout_marginStart="24dp" | ||
| 25 | + android:layout_marginTop="104dp" | ||
| 26 | + android:onClick="decodeNoAssetsFile" | ||
| 27 | + android:text="AES解密(除assets外)" | ||
| 28 | + app:layout_constraintStart_toStartOf="parent" | ||
| 29 | + app:layout_constraintTop_toBottomOf="@+id/button" /> | ||
| 30 | + | ||
| 31 | + <Button | ||
| 32 | + android:id="@+id/button" | ||
| 33 | + android:layout_width="322dp" | ||
| 34 | + android:layout_height="70dp" | ||
| 35 | + android:layout_marginStart="24dp" | ||
| 36 | + android:layout_marginTop="24dp" | ||
| 37 | + android:text="Aes加密(Assets)" | ||
| 38 | + android:onClick="encodeAssetsFile" | ||
| 39 | + app:layout_constraintStart_toStartOf="parent" | ||
| 40 | + app:layout_constraintTop_toTopOf="parent" /> | ||
| 41 | + | ||
| 42 | + <Button | ||
| 43 | + android:id="@+id/button2" | ||
| 44 | + android:layout_width="326dp" | ||
| 45 | + android:layout_height="71dp" | ||
| 46 | + android:layout_marginStart="24dp" | ||
| 47 | + android:layout_marginTop="16dp" | ||
| 48 | + android:text="AES解密(Assets)" | ||
| 49 | + android:onClick="decodeAssetsFile" | ||
| 50 | + app:layout_constraintStart_toStartOf="parent" | ||
| 51 | + app:layout_constraintTop_toBottomOf="@+id/button" /> | ||
| 52 | + | ||
| 53 | + <Button | ||
| 54 | + android:id="@+id/button4" | ||
| 55 | + android:layout_width="320dp" | ||
| 56 | + android:layout_height="60dp" | ||
| 57 | + android:layout_marginStart="24dp" | ||
| 58 | + android:layout_marginTop="16dp" | ||
| 59 | + android:text="Aes加密(除Assets外)" | ||
| 60 | + android:onClick="encodeNoAssetsFile" | ||
| 61 | + app:layout_constraintStart_toStartOf="parent" | ||
| 62 | + app:layout_constraintTop_toBottomOf="@+id/button3" /> | ||
| 63 | + | ||
| 64 | + <Button | ||
| 65 | + android:id="@+id/button5" | ||
| 66 | + android:layout_width="320dp" | ||
| 67 | + android:layout_height="60dp" | ||
| 68 | + android:layout_marginStart="24dp" | ||
| 69 | + android:layout_marginTop="16dp" | ||
| 70 | + android:onClick="contentAesEncode" | ||
| 71 | + android:text="内容加密" | ||
| 72 | + app:layout_constraintStart_toStartOf="parent" | ||
| 73 | + app:layout_constraintTop_toBottomOf="@+id/button4" /> | ||
| 74 | + | ||
| 75 | +</androidx.constraintlayout.widget.ConstraintLayout> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | ||
| 3 | + <background android:drawable="@drawable/ic_launcher_background" /> | ||
| 4 | + <foreground android:drawable="@drawable/ic_launcher_foreground" /> | ||
| 5 | +</adaptive-icon> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | ||
| 3 | + <background android:drawable="@drawable/ic_launcher_background" /> | ||
| 4 | + <foreground android:drawable="@drawable/ic_launcher_foreground" /> | ||
| 5 | +</adaptive-icon> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
2.89 KB
4.79 KB
2.01 KB
2.72 KB
4.38 KB
6.73 KB
6.24 KB
8.91 KB
| 1 | +<resources> | ||
| 2 | + | ||
| 3 | + <!-- Base application theme. --> | ||
| 4 | + <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> | ||
| 5 | + <!-- Customize your theme here. --> | ||
| 6 | + <item name="colorPrimary">@color/colorPrimary</item> | ||
| 7 | + <item name="colorPrimaryDark">@color/colorPrimaryDark</item> | ||
| 8 | + <item name="colorAccent">@color/colorAccent</item> | ||
| 9 | + </style> | ||
| 10 | + | ||
| 11 | +</resources> |
| 1 | +package com.common.ndk.aes; | ||
| 2 | + | ||
| 3 | +import org.junit.Test; | ||
| 4 | + | ||
| 5 | +import static org.junit.Assert.*; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * Example local unit test, which will execute on the development machine (host). | ||
| 9 | + * | ||
| 10 | + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> | ||
| 11 | + */ | ||
| 12 | +public class ExampleUnitTest { | ||
| 13 | + @Test | ||
| 14 | + public void addition_isCorrect() { | ||
| 15 | + assertEquals(4, 2 + 2); | ||
| 16 | + } | ||
| 17 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
doc/aes资源解密资料/GameResAes/build.gradle
0 → 100644
| 1 | +// Top-level build file where you can add configuration options common to all sub-projects/modules. | ||
| 2 | + | ||
| 3 | +buildscript { | ||
| 4 | + repositories { | ||
| 5 | + google() | ||
| 6 | + jcenter() | ||
| 7 | + | ||
| 8 | + } | ||
| 9 | + dependencies { | ||
| 10 | + classpath 'com.android.tools.build:gradle:3.5.3' | ||
| 11 | + | ||
| 12 | + // NOTE: Do not place your application dependencies here; they belong | ||
| 13 | + // in the individual module build.gradle files | ||
| 14 | + } | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | +allprojects { | ||
| 18 | + repositories { | ||
| 19 | + google() | ||
| 20 | + jcenter() | ||
| 21 | + | ||
| 22 | + } | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +task clean(type: Delete) { | ||
| 26 | + delete rootProject.buildDir | ||
| 27 | +} |
doc/aes资源解密资料/GameResAes/gradle.properties
0 → 100644
| 1 | +# Project-wide Gradle settings. | ||
| 2 | +# IDE (e.g. Android Studio) users: | ||
| 3 | +# Gradle settings configured through the IDE *will override* | ||
| 4 | +# any settings specified in this file. | ||
| 5 | +# For more details on how to configure your build environment visit | ||
| 6 | +# http://www.gradle.org/docs/current/userguide/build_environment.html | ||
| 7 | +# Specifies the JVM arguments used for the daemon process. | ||
| 8 | +# The setting is particularly useful for tweaking memory settings. | ||
| 9 | +org.gradle.jvmargs=-Xmx1536m | ||
| 10 | +# When configured, Gradle will run in incubating parallel mode. | ||
| 11 | +# This option should only be used with decoupled projects. More details, visit | ||
| 12 | +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects | ||
| 13 | +# org.gradle.parallel=true | ||
| 14 | +# AndroidX package structure to make it clearer which packages are bundled with the | ||
| 15 | +# Android operating system, and which are packaged with your app's APK | ||
| 16 | +# https://developer.android.com/topic/libraries/support-library/androidx-rn | ||
| 17 | +android.useAndroidX=true | ||
| 18 | +# Automatically convert third-party libraries to use AndroidX | ||
| 19 | +android.enableJetifier=true | ||
| 20 | + |
No preview for this file type
doc/aes资源解密资料/GameResAes/gradlew
0 → 100644
| 1 | +#!/usr/bin/env sh | ||
| 2 | + | ||
| 3 | +############################################################################## | ||
| 4 | +## | ||
| 5 | +## Gradle start up script for UN*X | ||
| 6 | +## | ||
| 7 | +############################################################################## | ||
| 8 | + | ||
| 9 | +# Attempt to set APP_HOME | ||
| 10 | +# Resolve links: $0 may be a link | ||
| 11 | +PRG="$0" | ||
| 12 | +# Need this for relative symlinks. | ||
| 13 | +while [ -h "$PRG" ] ; do | ||
| 14 | + ls=`ls -ld "$PRG"` | ||
| 15 | + link=`expr "$ls" : '.*-> \(.*\)$'` | ||
| 16 | + if expr "$link" : '/.*' > /dev/null; then | ||
| 17 | + PRG="$link" | ||
| 18 | + else | ||
| 19 | + PRG=`dirname "$PRG"`"/$link" | ||
| 20 | + fi | ||
| 21 | +done | ||
| 22 | +SAVED="`pwd`" | ||
| 23 | +cd "`dirname \"$PRG\"`/" >/dev/null | ||
| 24 | +APP_HOME="`pwd -P`" | ||
| 25 | +cd "$SAVED" >/dev/null | ||
| 26 | + | ||
| 27 | +APP_NAME="Gradle" | ||
| 28 | +APP_BASE_NAME=`basename "$0"` | ||
| 29 | + | ||
| 30 | +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
| 31 | +DEFAULT_JVM_OPTS="" | ||
| 32 | + | ||
| 33 | +# Use the maximum available, or set MAX_FD != -1 to use that value. | ||
| 34 | +MAX_FD="maximum" | ||
| 35 | + | ||
| 36 | +warn () { | ||
| 37 | + echo "$*" | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +die () { | ||
| 41 | + echo | ||
| 42 | + echo "$*" | ||
| 43 | + echo | ||
| 44 | + exit 1 | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +# OS specific support (must be 'true' or 'false'). | ||
| 48 | +cygwin=false | ||
| 49 | +msys=false | ||
| 50 | +darwin=false | ||
| 51 | +nonstop=false | ||
| 52 | +case "`uname`" in | ||
| 53 | + CYGWIN* ) | ||
| 54 | + cygwin=true | ||
| 55 | + ;; | ||
| 56 | + Darwin* ) | ||
| 57 | + darwin=true | ||
| 58 | + ;; | ||
| 59 | + MINGW* ) | ||
| 60 | + msys=true | ||
| 61 | + ;; | ||
| 62 | + NONSTOP* ) | ||
| 63 | + nonstop=true | ||
| 64 | + ;; | ||
| 65 | +esac | ||
| 66 | + | ||
| 67 | +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | ||
| 68 | + | ||
| 69 | +# Determine the Java command to use to start the JVM. | ||
| 70 | +if [ -n "$JAVA_HOME" ] ; then | ||
| 71 | + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||
| 72 | + # IBM's JDK on AIX uses strange locations for the executables | ||
| 73 | + JAVACMD="$JAVA_HOME/jre/sh/java" | ||
| 74 | + else | ||
| 75 | + JAVACMD="$JAVA_HOME/bin/java" | ||
| 76 | + fi | ||
| 77 | + if [ ! -x "$JAVACMD" ] ; then | ||
| 78 | + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | ||
| 79 | + | ||
| 80 | +Please set the JAVA_HOME variable in your environment to match the | ||
| 81 | +location of your Java installation." | ||
| 82 | + fi | ||
| 83 | +else | ||
| 84 | + JAVACMD="java" | ||
| 85 | + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
| 86 | + | ||
| 87 | +Please set the JAVA_HOME variable in your environment to match the | ||
| 88 | +location of your Java installation." | ||
| 89 | +fi | ||
| 90 | + | ||
| 91 | +# Increase the maximum file descriptors if we can. | ||
| 92 | +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then | ||
| 93 | + MAX_FD_LIMIT=`ulimit -H -n` | ||
| 94 | + if [ $? -eq 0 ] ; then | ||
| 95 | + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | ||
| 96 | + MAX_FD="$MAX_FD_LIMIT" | ||
| 97 | + fi | ||
| 98 | + ulimit -n $MAX_FD | ||
| 99 | + if [ $? -ne 0 ] ; then | ||
| 100 | + warn "Could not set maximum file descriptor limit: $MAX_FD" | ||
| 101 | + fi | ||
| 102 | + else | ||
| 103 | + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | ||
| 104 | + fi | ||
| 105 | +fi | ||
| 106 | + | ||
| 107 | +# For Darwin, add options to specify how the application appears in the dock | ||
| 108 | +if $darwin; then | ||
| 109 | + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | ||
| 110 | +fi | ||
| 111 | + | ||
| 112 | +# For Cygwin, switch paths to Windows format before running java | ||
| 113 | +if $cygwin ; then | ||
| 114 | + APP_HOME=`cygpath --path --mixed "$APP_HOME"` | ||
| 115 | + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | ||
| 116 | + JAVACMD=`cygpath --unix "$JAVACMD"` | ||
| 117 | + | ||
| 118 | + # We build the pattern for arguments to be converted via cygpath | ||
| 119 | + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | ||
| 120 | + SEP="" | ||
| 121 | + for dir in $ROOTDIRSRAW ; do | ||
| 122 | + ROOTDIRS="$ROOTDIRS$SEP$dir" | ||
| 123 | + SEP="|" | ||
| 124 | + done | ||
| 125 | + OURCYGPATTERN="(^($ROOTDIRS))" | ||
| 126 | + # Add a user-defined pattern to the cygpath arguments | ||
| 127 | + if [ "$GRADLE_CYGPATTERN" != "" ] ; then | ||
| 128 | + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | ||
| 129 | + fi | ||
| 130 | + # Now convert the arguments - kludge to limit ourselves to /bin/sh | ||
| 131 | + i=0 | ||
| 132 | + for arg in "$@" ; do | ||
| 133 | + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | ||
| 134 | + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | ||
| 135 | + | ||
| 136 | + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | ||
| 137 | + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | ||
| 138 | + else | ||
| 139 | + eval `echo args$i`="\"$arg\"" | ||
| 140 | + fi | ||
| 141 | + i=$((i+1)) | ||
| 142 | + done | ||
| 143 | + case $i in | ||
| 144 | + (0) set -- ;; | ||
| 145 | + (1) set -- "$args0" ;; | ||
| 146 | + (2) set -- "$args0" "$args1" ;; | ||
| 147 | + (3) set -- "$args0" "$args1" "$args2" ;; | ||
| 148 | + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; | ||
| 149 | + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | ||
| 150 | + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | ||
| 151 | + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | ||
| 152 | + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | ||
| 153 | + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | ||
| 154 | + esac | ||
| 155 | +fi | ||
| 156 | + | ||
| 157 | +# Escape application args | ||
| 158 | +save () { | ||
| 159 | + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done | ||
| 160 | + echo " " | ||
| 161 | +} | ||
| 162 | +APP_ARGS=$(save "$@") | ||
| 163 | + | ||
| 164 | +# Collect all arguments for the java command, following the shell quoting and substitution rules | ||
| 165 | +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" | ||
| 166 | + | ||
| 167 | +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong | ||
| 168 | +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then | ||
| 169 | + cd "$(dirname "$0")" | ||
| 170 | +fi | ||
| 171 | + | ||
| 172 | +exec "$JAVACMD" "$@" |
doc/aes资源解密资料/GameResAes/gradlew.bat
0 → 100644
| 1 | +@if "%DEBUG%" == "" @echo off | ||
| 2 | +@rem ########################################################################## | ||
| 3 | +@rem | ||
| 4 | +@rem Gradle startup script for Windows | ||
| 5 | +@rem | ||
| 6 | +@rem ########################################################################## | ||
| 7 | + | ||
| 8 | +@rem Set local scope for the variables with windows NT shell | ||
| 9 | +if "%OS%"=="Windows_NT" setlocal | ||
| 10 | + | ||
| 11 | +set DIRNAME=%~dp0 | ||
| 12 | +if "%DIRNAME%" == "" set DIRNAME=. | ||
| 13 | +set APP_BASE_NAME=%~n0 | ||
| 14 | +set APP_HOME=%DIRNAME% | ||
| 15 | + | ||
| 16 | +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
| 17 | +set DEFAULT_JVM_OPTS= | ||
| 18 | + | ||
| 19 | +@rem Find java.exe | ||
| 20 | +if defined JAVA_HOME goto findJavaFromJavaHome | ||
| 21 | + | ||
| 22 | +set JAVA_EXE=java.exe | ||
| 23 | +%JAVA_EXE% -version >NUL 2>&1 | ||
| 24 | +if "%ERRORLEVEL%" == "0" goto init | ||
| 25 | + | ||
| 26 | +echo. | ||
| 27 | +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
| 28 | +echo. | ||
| 29 | +echo Please set the JAVA_HOME variable in your environment to match the | ||
| 30 | +echo location of your Java installation. | ||
| 31 | + | ||
| 32 | +goto fail | ||
| 33 | + | ||
| 34 | +:findJavaFromJavaHome | ||
| 35 | +set JAVA_HOME=%JAVA_HOME:"=% | ||
| 36 | +set JAVA_EXE=%JAVA_HOME%/bin/java.exe | ||
| 37 | + | ||
| 38 | +if exist "%JAVA_EXE%" goto init | ||
| 39 | + | ||
| 40 | +echo. | ||
| 41 | +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | ||
| 42 | +echo. | ||
| 43 | +echo Please set the JAVA_HOME variable in your environment to match the | ||
| 44 | +echo location of your Java installation. | ||
| 45 | + | ||
| 46 | +goto fail | ||
| 47 | + | ||
| 48 | +:init | ||
| 49 | +@rem Get command-line arguments, handling Windows variants | ||
| 50 | + | ||
| 51 | +if not "%OS%" == "Windows_NT" goto win9xME_args | ||
| 52 | + | ||
| 53 | +:win9xME_args | ||
| 54 | +@rem Slurp the command line arguments. | ||
| 55 | +set CMD_LINE_ARGS= | ||
| 56 | +set _SKIP=2 | ||
| 57 | + | ||
| 58 | +:win9xME_args_slurp | ||
| 59 | +if "x%~1" == "x" goto execute | ||
| 60 | + | ||
| 61 | +set CMD_LINE_ARGS=%* | ||
| 62 | + | ||
| 63 | +:execute | ||
| 64 | +@rem Setup the command line | ||
| 65 | + | ||
| 66 | +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | ||
| 67 | + | ||
| 68 | +@rem Execute Gradle | ||
| 69 | +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | ||
| 70 | + | ||
| 71 | +:end | ||
| 72 | +@rem End local scope for the variables with windows NT shell | ||
| 73 | +if "%ERRORLEVEL%"=="0" goto mainEnd | ||
| 74 | + | ||
| 75 | +:fail | ||
| 76 | +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | ||
| 77 | +rem the _cmd.exe /c_ return code! | ||
| 78 | +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | ||
| 79 | +exit /b 1 | ||
| 80 | + | ||
| 81 | +:mainEnd | ||
| 82 | +if "%OS%"=="Windows_NT" endlocal | ||
| 83 | + | ||
| 84 | +:omega |
doc/aes资源解密资料/GameResAes/local.properties
0 → 100644
| 1 | +## This file is automatically generated by Android Studio. | ||
| 2 | +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! | ||
| 3 | +# | ||
| 4 | +# This file should *NOT* be checked into Version Control Systems, | ||
| 5 | +# as it contains information specific to your local configuration. | ||
| 6 | +# | ||
| 7 | +# Location of the SDK. This is only used by Gradle. | ||
| 8 | +# For customization when using a Version Control System, please read the | ||
| 9 | +# header note. | ||
| 10 | +sdk.dir=/Users/guangka123/Library/Android/sdk |
doc/aes资源解密资料/GameResAes/settings.gradle
0 → 100644
No preview for this file type
No preview for this file type
doc/aes资源解密资料/libs/commonAes.jar
0 → 100644
No preview for this file type
doc/aes资源解密资料/libs/x86/libcommon-sdk.so
0 → 100644
No preview for this file type
doc/aes资源解密资料/libs/x86_64/libcommon-sdk.so
0 → 100644
No preview for this file type
doc/aes资源解密资料/资源AES解密接入文档.md
0 → 100644
| 1 | +# 资源AES解密接入文档 | ||
| 2 | + | ||
| 3 | +### 注意事项: | ||
| 4 | +- `使用so库需使用如下签名打包,否则调用接口失败` | ||
| 5 | +``` | ||
| 6 | +guangka签名md5 = "DE512029CD933F45124586FB275B645C"; | ||
| 7 | +wanqi签名md5 = "F3931078270964DFA23F0444EB1A8AB9"; | ||
| 8 | +gktest签名md5 = "15D040B1F80BA16B4DCCFDE61B7F5BEC"; | ||
| 9 | +jingyou签名md5 = "4992B09A21DEDEF3B4F776214E706287"; | ||
| 10 | +``` | ||
| 11 | + | ||
| 12 | +### 添加资源环境 | ||
| 13 | +- 将libs下的Jar包和so库(根据游戏复制对应的so库)项目的libs下 | ||
| 14 | +- 在工程的build.gradle中添加如下配置 | ||
| 15 | +``` | ||
| 16 | +sourceSets { | ||
| 17 | + main { | ||
| 18 | + jniLibs.srcDirs = ['libs'] | ||
| 19 | + } | ||
| 20 | +} | ||
| 21 | +``` | ||
| 22 | + | ||
| 23 | +### 在Application或者主load对应so库 | ||
| 24 | +``` | ||
| 25 | +static { | ||
| 26 | + System.loadLibrary("common-sdk"); | ||
| 27 | +} | ||
| 28 | +``` | ||
| 29 | + | ||
| 30 | +### 接入调用(接口在CryptInterface类中) | ||
| 31 | +- 初始化接口(Application或者主Activity的onCreate中调用) | ||
| 32 | +``` | ||
| 33 | +public static void init(Application application) | ||
| 34 | +``` | ||
| 35 | +例子: | ||
| 36 | +``` | ||
| 37 | +CryptInterface.init(getApplication()); | ||
| 38 | +``` | ||
| 39 | + | ||
| 40 | +- 解密接口(解密assets目录中的资源) | ||
| 41 | +``` | ||
| 42 | +public static void decodeAssetsFilesFromDir(String fromDirPath, String toDirPath, CryptCallBack callBack) | ||
| 43 | +``` | ||
| 44 | +接口参数说明 | ||
| 45 | + | ||
| 46 | +|字段名称 |字段说明 | | ||
| 47 | +| -------------|:--------------:| | ||
| 48 | +|fromDirPath |要解密资源assets的相对目录 | | ||
| 49 | +|toDirPath |解密资源到某个目录 | | ||
| 50 | +|callBack |解密结果回调 | | ||
| 51 | + | ||
| 52 | +CryptCallBack说明: | ||
| 53 | + | ||
| 54 | +|字段名称 |字段说明 | | ||
| 55 | +| -------------|:--------------:| | ||
| 56 | +|code |10:解密成功(所有资源都成功才返回) 其他code为失败 | | ||
| 57 | +|msg |解密结果描述 | | ||
| 58 | +例子: | ||
| 59 | +``` | ||
| 60 | +CryptInterface.decodeAssetsFilesFromDir("commonEncode", Environment.getExternalStorageDirectory() + "/gametest/encodeRes7", new CryptCallBack() { | ||
| 61 | + @Override | ||
| 62 | + public void callback(int code, Object msg) { | ||
| 63 | + CommonLog.logDebug("code:" + code + " message:" + msg); | ||
| 64 | + } | ||
| 65 | +}); | ||
| 66 | +``` | ||
| 67 | + | ||
| 68 | +- 解密接口(解密除assets目录外的资源) | ||
| 69 | +``` | ||
| 70 | +public static void decodeSdFilesFromDir(String fromDirPath, String toDirPath, CryptCallBack callBack) | ||
| 71 | +``` | ||
| 72 | +接口参数说明 | ||
| 73 | + | ||
| 74 | +|字段名称 |字段说明 | | ||
| 75 | +| -------------|:--------------:| | ||
| 76 | +|fromDirPath |要解密资源的绝对路径 | | ||
| 77 | +|toDirPath |解密资源到某个目录 | | ||
| 78 | +|callBack |解密结果回调 | | ||
| 79 | + | ||
| 80 | +CryptCallBack说明: | ||
| 81 | + | ||
| 82 | +|字段名称 |字段说明 | | ||
| 83 | +| -------------|:--------------:| | ||
| 84 | +|code |10:解密成功(所有资源都成功才返回) 其他code为失败 | | ||
| 85 | +|msg |解密结果描述 | | ||
| 86 | +例子: | ||
| 87 | +``` | ||
| 88 | +File storageDirectory = Environment.getExternalStorageDirectory(); | ||
| 89 | +String fromDir = storageDirectory + "/gametest/res"; | ||
| 90 | +String toDir = storageDirectory + "/gametest/decodeRes"; | ||
| 91 | +CryptInterface.decodeSdFilesFromDir(fromDir, toDir, new CryptCallBack() { | ||
| 92 | + @Override | ||
| 93 | + public void callback(int code, Object msg) { | ||
| 94 | + CommonLog.logDebug("code:" + code + " message:" + msg); | ||
| 95 | + } | ||
| 96 | +}); | ||
| 97 | +``` | ||
| 98 | + | ||
| 99 | +- 解密接口(直接解密传递的内容) | ||
| 100 | +``` | ||
| 101 | +public static void decode(byte[] content, CryptCallBack callBack) | ||
| 102 | +``` | ||
| 103 | +接口参数说明 | ||
| 104 | + | ||
| 105 | +|字段名称 |字段说明 | | ||
| 106 | +| -------------|:--------------:| | ||
| 107 | +|content |要解密的内容 | | ||
| 108 | +|callBack |解密结果回调 | | ||
| 109 | + | ||
| 110 | +CryptCallBack说明: | ||
| 111 | + | ||
| 112 | +|字段名称 |字段说明 | | ||
| 113 | +| -------------|:--------------:| | ||
| 114 | +|code |10:解密成功(所有资源都成功才返回) 其他code为失败 | | ||
| 115 | +|msg |当code为10时返回的是解密内容(类型是byte数组) 其他时失败描述 | | ||
| 116 | +例子: | ||
| 117 | +``` | ||
| 118 | +byte[] decodeContent = {-31,-25,-89,40,108,-67,-41,-61,-92,-103,-104,-106,-93,38,-8,-115}; | ||
| 119 | +CryptInterface.decode(decodeContent, new CryptCallBack() { | ||
| 120 | + @Override | ||
| 121 | + public void callback(int code, Object msg) { | ||
| 122 | + if(code == CryptCallBack.success){ | ||
| 123 | + //解密成功 | ||
| 124 | + byte[] decodeResult = (byte[]) msg; | ||
| 125 | + CommonLog.logDebug("msg:" + new String(decodeResult,0,decodeResult.length)); | ||
| 126 | + }else{ | ||
| 127 | + //解密失败 | ||
| 128 | + CommonLog.logError("encode error:" + msg); | ||
| 129 | + } | ||
| 130 | + } | ||
| 131 | +}); | ||
| 132 | +``` | ||
| 133 | + | ||
| 134 | + | ||
| 135 | + | ||
| 136 | + | ||
| 137 | + | ||
| 138 | + | ||
| 139 | + | ||
| 140 | + | ||
| 141 | + | ||
| 142 | + | ||
| 143 | + | ||
| 144 | + | ||
| 145 | + | ||
| 146 | + |
doc/aes资源解密资料/资源AES解密接入文档.pdf
0 → 100644
No preview for this file type
-
Please register or login to post a comment