xuguohong

add aes

Showing 52 changed files with 1649 additions and 0 deletions
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
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
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 +}
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
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
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
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<resources>
3 + <color name="colorPrimary">#008577</color>
4 + <color name="colorPrimaryDark">#00574B</color>
5 + <color name="colorAccent">#D81B60</color>
6 +</resources>
1 +<resources>
2 + <string name="app_name">NativeAes</string>
3 +</resources>
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
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 +}
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 +
1 +#Thu Mar 18 10:33:16 CST 2021
2 +distributionBase=GRADLE_USER_HOME
3 +distributionPath=wrapper/dists
4 +zipStoreBase=GRADLE_USER_HOME
5 +zipStorePath=wrapper/dists
6 +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
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" "$@"
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
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
1 +include ':app', ':native_aes'
2 +rootProject.name='NativeAes'
No preview for this file type
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 +