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