@pi-r/android 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/google-maven-snapshot.json +1 -1
- package/data/google-maven.json +1 -1
- package/extensions/app/manifest/index.js +201 -53
- package/extensions/gradle/dependencies/index.js +2 -3
- package/extensions/task/index.js +5 -6
- package/package.json +6 -6
- package/project/gradle/wrapper/gradle-wrapper.properties +1 -1
- package/template/java/build.gradle +6 -6
- package/template/java/settings.gradle +17 -17
- package/template/java/static/build.gradle +2 -2
- package/template/java+kotlin/build.gradle +16 -11
- package/template/java+kotlin/libs.versions.toml +2 -2
- package/template/kotlin/build.gradle.kts +11 -6
- package/template/kotlin/libs.versions.toml +3 -3
- package/types/squared.d.ts +2 -2
|
@@ -8,7 +8,147 @@ const types_1 = require("@e-mc/types");
|
|
|
8
8
|
const util_1 = require("@e-mc/document/util");
|
|
9
9
|
const Parser = htmlparser2.Parser;
|
|
10
10
|
const DomHandler = domhandler.DomHandler;
|
|
11
|
-
const MANIFEST_ATTR = [
|
|
11
|
+
const MANIFEST_ATTR = [
|
|
12
|
+
'package',
|
|
13
|
+
'android:sharedUserId',
|
|
14
|
+
'android:sharedUserLabel',
|
|
15
|
+
'android:sharedUserMaxSdkVersion',
|
|
16
|
+
'android:versionCode',
|
|
17
|
+
'android:versionName',
|
|
18
|
+
'android:installLocation'
|
|
19
|
+
];
|
|
20
|
+
const APPLICATION_ATTR = [
|
|
21
|
+
'android:allowTaskReparenting',
|
|
22
|
+
'android:allowBackup',
|
|
23
|
+
'android:allowClearUserData',
|
|
24
|
+
'android:allowNativeHeapPointerTagging',
|
|
25
|
+
'android:appCategory',
|
|
26
|
+
'android:backupAgent',
|
|
27
|
+
'android:backupInForeground',
|
|
28
|
+
'android:banner',
|
|
29
|
+
'android:dataExtractionRules',
|
|
30
|
+
'android:debuggable',
|
|
31
|
+
'android:description',
|
|
32
|
+
'android:enabled',
|
|
33
|
+
'android:enableOnBackInvokedCallback',
|
|
34
|
+
'android:extractNativeLibs',
|
|
35
|
+
'android:fullBackupContent',
|
|
36
|
+
'android:fullBackupOnly',
|
|
37
|
+
'android:gwpAsanMode',
|
|
38
|
+
'android:hasCode',
|
|
39
|
+
'android:hasFragileUserData',
|
|
40
|
+
'android:hardwareAccelerated',
|
|
41
|
+
'android:icon',
|
|
42
|
+
'android:isGame',
|
|
43
|
+
'android:isMonitoringTool',
|
|
44
|
+
'android:killAfterRestore',
|
|
45
|
+
'android:largeHeap',
|
|
46
|
+
'android:logo',
|
|
47
|
+
'android:manageSpaceActivity',
|
|
48
|
+
'android:name',
|
|
49
|
+
'android:networkSecurityConfig',
|
|
50
|
+
'android:permission',
|
|
51
|
+
'android:persistent',
|
|
52
|
+
'android:process',
|
|
53
|
+
'android:restoreAnyVersion',
|
|
54
|
+
'android:requestLegacyExternalStorage',
|
|
55
|
+
'android:requiredAccountType',
|
|
56
|
+
'android:resizeableActivity',
|
|
57
|
+
'android:restrictedAccountType',
|
|
58
|
+
'android:taskAffinity',
|
|
59
|
+
'android:testOnly',
|
|
60
|
+
'android:uiOptions',
|
|
61
|
+
'android:usesCleartextTraffic',
|
|
62
|
+
'android:vmSafeMode'
|
|
63
|
+
];
|
|
64
|
+
const ACTIVITY_ATTR = [
|
|
65
|
+
'android:allowEmbedded',
|
|
66
|
+
'android:allowTaskReparenting',
|
|
67
|
+
'android:alwaysRetainTaskState',
|
|
68
|
+
'android:autoRemoveFromRecents',
|
|
69
|
+
'android:banner',
|
|
70
|
+
'android:canDisplayOnRemoteDevices',
|
|
71
|
+
'android:clearTaskOnLaunch',
|
|
72
|
+
'android:colorMode',
|
|
73
|
+
'android:configChanges',
|
|
74
|
+
'android:directBootAware',
|
|
75
|
+
'android:documentLaunchMode',
|
|
76
|
+
'android:enabled',
|
|
77
|
+
'android:enableOnBackInvokedCallback',
|
|
78
|
+
'android:excludeFromRecents',
|
|
79
|
+
'android:exported',
|
|
80
|
+
'android:finishOnTaskLaunch',
|
|
81
|
+
'android:hardwareAccelerated',
|
|
82
|
+
'android:icon',
|
|
83
|
+
'android:immersive',
|
|
84
|
+
'android:label',
|
|
85
|
+
'android:launchMode',
|
|
86
|
+
'android:lockTaskMode',
|
|
87
|
+
'android:maxRecents',
|
|
88
|
+
'android:maxAspectRatio',
|
|
89
|
+
'android:minAspectRatio',
|
|
90
|
+
'android:multiprocess',
|
|
91
|
+
'android:name',
|
|
92
|
+
'android:noHistory',
|
|
93
|
+
'android:parentActivityName',
|
|
94
|
+
'android:persistableMode',
|
|
95
|
+
'android:permission',
|
|
96
|
+
'android:process',
|
|
97
|
+
'android:relinquishTaskIdentity',
|
|
98
|
+
'android:requireContentUriPermissionFromCaller',
|
|
99
|
+
'android:resizeableActivity',
|
|
100
|
+
'android:screenOrientation',
|
|
101
|
+
'android:showForAllUsers',
|
|
102
|
+
'android:stateNotNeeded',
|
|
103
|
+
'android:supportsPictureInPicture',
|
|
104
|
+
'android:taskAffinity',
|
|
105
|
+
'android:theme',
|
|
106
|
+
'android:uiOptions',
|
|
107
|
+
'android:windowSoftInputMode'
|
|
108
|
+
];
|
|
109
|
+
const INVALID_ATTR = [
|
|
110
|
+
[36, ['android:resizableActivity', 'android:minAspectRatio', 'android:maxAspectRatio']]
|
|
111
|
+
];
|
|
112
|
+
function getValidKeys(instance, data, attrList) {
|
|
113
|
+
const result = [];
|
|
114
|
+
const targetApi = typeof instance.targetAPI === 'number' ? instance.targetAPI : 0;
|
|
115
|
+
for (let attr in data) {
|
|
116
|
+
let value = data[attr];
|
|
117
|
+
const messageString = (type) => `${type} attribute: ${attr}="${value || 'null'}"`;
|
|
118
|
+
invalid: {
|
|
119
|
+
if (attrList.includes(attr) || !attr.includes(':') && attrList.includes(attr = 'android:' + attr)) {
|
|
120
|
+
value = Array.isArray(value) ? value.join('|') : value?.toString() || '';
|
|
121
|
+
if (targetApi >= 36) {
|
|
122
|
+
for (const [api, attrs] of INVALID_ATTR) {
|
|
123
|
+
if (targetApi >= api && attrs.includes(attr)) {
|
|
124
|
+
instance.addLog(instance.statusType.WARN, messageString("Invalid config"));
|
|
125
|
+
break invalid;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
result.push([attr, value]);
|
|
130
|
+
}
|
|
131
|
+
else if (value !== undefined) {
|
|
132
|
+
instance.addLog(instance.statusType.INFO, messageString("Unknown"));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
function applyAttributes(target, keys) {
|
|
139
|
+
if (keys.length === 0) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
for (const [attr, value] of keys) {
|
|
143
|
+
if (value) {
|
|
144
|
+
target.attribs[attr] = value;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
delete target.attribs[attr];
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
12
152
|
function finalize(instance) {
|
|
13
153
|
const config = instance.config;
|
|
14
154
|
const manifest = config.manifest;
|
|
@@ -17,8 +157,11 @@ function finalize(instance) {
|
|
|
17
157
|
}
|
|
18
158
|
let { localUri, source, existing } = instance.findTemplate(path.join(this.baseDirectory, config.mainParentDir, config.mainSrcDir), "AndroidManifest.xml", { detect: instance.detect(this) });
|
|
19
159
|
if (localUri && source && instance.canWrite(localUri, { ownPermissionOnly: true })) {
|
|
20
|
-
const
|
|
160
|
+
const application = manifest.application || {};
|
|
161
|
+
const { supportsRtl, label, theme, activity, metaData = [], activityName, fontProvider } = application;
|
|
21
162
|
const profileable = config.profileable;
|
|
163
|
+
const applicationKeys = getValidKeys(instance, application, APPLICATION_ATTR);
|
|
164
|
+
const manifestKeys = getValidKeys(instance, manifest, MANIFEST_ATTR);
|
|
22
165
|
let modified = false;
|
|
23
166
|
if (!existing) {
|
|
24
167
|
source = (0, util_1.replaceAll)(source, (name) => {
|
|
@@ -28,7 +171,7 @@ function finalize(instance) {
|
|
|
28
171
|
case 'label':
|
|
29
172
|
return '@string/' + (label || 'app_name');
|
|
30
173
|
case 'theme':
|
|
31
|
-
return '@style/' + (theme || 'Theme.
|
|
174
|
+
return '@style/' + (theme || 'Theme.AppCompat.Light.NoActionBar');
|
|
32
175
|
case 'activityName':
|
|
33
176
|
return activityName || '';
|
|
34
177
|
case 'profileable':
|
|
@@ -38,7 +181,7 @@ function finalize(instance) {
|
|
|
38
181
|
}
|
|
39
182
|
});
|
|
40
183
|
}
|
|
41
|
-
|
|
184
|
+
if (existing && (theme || activityName || activity || supportsRtl !== undefined) || applicationKeys.length > 0) {
|
|
42
185
|
new Parser(new DomHandler((err, dom) => {
|
|
43
186
|
if (err) {
|
|
44
187
|
instance.writeFail(['Unable to parse XML document', "AndroidManifest.xml"], err, 0);
|
|
@@ -48,38 +191,44 @@ function finalize(instance) {
|
|
|
48
191
|
if (!target) {
|
|
49
192
|
return;
|
|
50
193
|
}
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
194
|
+
if (existing) {
|
|
195
|
+
if (label) {
|
|
196
|
+
target.attribs['android:label'] = '@string/' + label;
|
|
197
|
+
modified = true;
|
|
198
|
+
}
|
|
199
|
+
if (theme) {
|
|
200
|
+
target.attribs['android:theme'] = '@style/' + theme;
|
|
201
|
+
modified = true;
|
|
202
|
+
}
|
|
203
|
+
if (supportsRtl !== undefined) {
|
|
204
|
+
target.attribs['android:supportsRtl'] = supportsRtl.toString();
|
|
205
|
+
modified = true;
|
|
206
|
+
}
|
|
207
|
+
if (activityName || activity) {
|
|
208
|
+
const activities = domutils.getElementsByTagName('activity', target, true);
|
|
209
|
+
if (activityName) {
|
|
210
|
+
for (const item of activities) {
|
|
211
|
+
const intentFilter = domutils.findAll(elem => elem.tagName === 'intent-filter', [item]);
|
|
212
|
+
if (intentFilter.length > 0) {
|
|
213
|
+
const action = domutils.findOne(elem => elem.tagName === 'action' && elem.attribs['android:name'] === 'android.intent.action.MAIN', intentFilter);
|
|
214
|
+
if (action) {
|
|
215
|
+
const attribs = item.attribs;
|
|
216
|
+
attribs['android:name'] = activityName;
|
|
217
|
+
attribs['android:exported'] = 'true';
|
|
218
|
+
modified = true;
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
76
221
|
}
|
|
77
222
|
}
|
|
78
223
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
224
|
+
for (const name in activity) {
|
|
225
|
+
const data = activity[name];
|
|
226
|
+
const attribs = data.layout;
|
|
227
|
+
delete data.layout;
|
|
228
|
+
const activityKeys = getValidKeys(instance, data, ACTIVITY_ATTR);
|
|
229
|
+
if (!(0, types_1.isPlainObject)(attribs) && activityKeys.length === 0) {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
83
232
|
let element = domutils.findOne(elem => elem.attribs['android:name'] === name, activities);
|
|
84
233
|
if (!element) {
|
|
85
234
|
domutils.appendChild(target, element = new domhandler.Element('activity', { 'android:name': name }));
|
|
@@ -91,6 +240,9 @@ function finalize(instance) {
|
|
|
91
240
|
domutils.append(layout, new domhandler.Text('\n'));
|
|
92
241
|
found = false;
|
|
93
242
|
}
|
|
243
|
+
if (applyAttributes(layout, activityKeys)) {
|
|
244
|
+
modified = true;
|
|
245
|
+
}
|
|
94
246
|
for (const attr in attribs) {
|
|
95
247
|
switch (attr) {
|
|
96
248
|
case 'defaultHeight':
|
|
@@ -109,17 +261,20 @@ function finalize(instance) {
|
|
|
109
261
|
}
|
|
110
262
|
}
|
|
111
263
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
264
|
+
if (profileable !== undefined) {
|
|
265
|
+
const attribs = profileable ? { 'android:shell': 'true', 'android:enabled': 'true' } : { 'android:enabled': 'false' };
|
|
266
|
+
const element = domutils.findOne(elem => elem.tagName === 'profileable', [target]);
|
|
267
|
+
if (element) {
|
|
268
|
+
Object.assign(element.attribs, attribs);
|
|
269
|
+
}
|
|
270
|
+
else if (profileable) {
|
|
271
|
+
domutils.appendChild(target, new domhandler.Element('profileable', attribs));
|
|
272
|
+
domutils.appendChild(target, new domhandler.Text('\n'));
|
|
273
|
+
}
|
|
274
|
+
modified = true;
|
|
122
275
|
}
|
|
276
|
+
}
|
|
277
|
+
if (applyAttributes(target, applicationKeys)) {
|
|
123
278
|
modified = true;
|
|
124
279
|
}
|
|
125
280
|
if (modified) {
|
|
@@ -130,22 +285,15 @@ function finalize(instance) {
|
|
|
130
285
|
if (fontProvider) {
|
|
131
286
|
metaData.push({ name: 'preloaded_fonts', resource: '@array/' + fontProvider });
|
|
132
287
|
}
|
|
133
|
-
|
|
134
|
-
if (keys.length > 0 || (0, types_1.isArray)(metaData)) {
|
|
288
|
+
if (manifestKeys.length > 0 || (0, types_1.isArray)(metaData)) {
|
|
135
289
|
new Parser(new DomHandler((err, dom) => {
|
|
136
290
|
if (err) {
|
|
137
291
|
instance.writeFail(['Unable to parse XML document', "AndroidManifest.xml"], err, 0);
|
|
138
292
|
return;
|
|
139
293
|
}
|
|
140
294
|
let target = null;
|
|
141
|
-
if (
|
|
142
|
-
|
|
143
|
-
if (!key.startsWith('android:') && key !== 'package') {
|
|
144
|
-
key = 'android:' + key;
|
|
145
|
-
}
|
|
146
|
-
target.attribs[key] = manifest[key]?.toString() || '';
|
|
147
|
-
modified = true;
|
|
148
|
-
}
|
|
295
|
+
if (manifestKeys.length > 0 && (target = domutils.findOne(elem => elem.tagName === 'manifest', dom, true)) && applyAttributes(target, manifestKeys)) {
|
|
296
|
+
modified = true;
|
|
149
297
|
}
|
|
150
298
|
if ((0, types_1.isArray)(metaData) && (target = domutils.findOne(elem => elem.tagName === 'application', dom, true))) {
|
|
151
299
|
for (const { name, resource, value } of metaData) {
|
|
@@ -434,7 +434,7 @@ function finalize(instance) {
|
|
|
434
434
|
output = Document.updateGradle(output, ['android', 'buildFeatures'], 'compose = true');
|
|
435
435
|
}
|
|
436
436
|
else {
|
|
437
|
-
const stdLib = instance.findVersion('org.jetbrains.kotlin:kotlin-stdlib', "2.
|
|
437
|
+
const stdLib = instance.findVersion('org.jetbrains.kotlin:kotlin-stdlib', "2.2.0");
|
|
438
438
|
output = Document.updateGradle(output, ['plugins'], "id 'org.jetbrains.kotlin.android'", { upgrade: true, multiple: true, addendum: `version '${stdLib}'` });
|
|
439
439
|
output = Document.updateGradle(output, ['android', 'buildFeatures'], "compose true");
|
|
440
440
|
if (stdLib.startsWith('1.')) {
|
|
@@ -561,8 +561,7 @@ function finalize(instance) {
|
|
|
561
561
|
const targetAPI = instance.targetAPI;
|
|
562
562
|
let output = source;
|
|
563
563
|
if (targetAPI) {
|
|
564
|
-
const [compileSdk, targetSdk] = typeof targetAPI === 'string' ? [`"android-${targetAPI}"`, `"${targetAPI}"
|
|
565
|
-
const updateOnly = +targetAPI >= 33;
|
|
564
|
+
const [compileSdk, targetSdk, updateOnly] = typeof targetAPI === 'string' ? [`"android-${targetAPI}"`, `"${targetAPI}"`, true] : [targetAPI, targetAPI, targetAPI >= 33];
|
|
566
565
|
let content = Document.updateGradle(output, ['android'], kotlin ? `compileSdkVersion(${compileSdk})` : 'compileSdkVersion ' + compileSdk, { upgrade: true, updateOnly });
|
|
567
566
|
if (content === output) {
|
|
568
567
|
output = Document.updateGradle(output, ['android'], kotlin ? `compileSdk(${compileSdk})` : 'compileSdk ' + compileSdk, true);
|
package/extensions/task/index.js
CHANGED
|
@@ -40,7 +40,6 @@ async function finalize(instance) {
|
|
|
40
40
|
if (!command.includes(path.sep)) {
|
|
41
41
|
filename = checkWin32(command);
|
|
42
42
|
}
|
|
43
|
-
command = (0, types_1.sanitizeCmd)(command);
|
|
44
43
|
}
|
|
45
44
|
else {
|
|
46
45
|
filename = checkWin32("gradlew");
|
|
@@ -64,7 +63,7 @@ async function finalize(instance) {
|
|
|
64
63
|
else if (altname) {
|
|
65
64
|
const bin = which.sync(altname, { nothrow: true });
|
|
66
65
|
if (bin) {
|
|
67
|
-
command =
|
|
66
|
+
command = bin;
|
|
68
67
|
}
|
|
69
68
|
}
|
|
70
69
|
}
|
|
@@ -89,10 +88,10 @@ async function finalize(instance) {
|
|
|
89
88
|
await new Promise((resolve, reject) => {
|
|
90
89
|
this.formatMessage(4, title, ['Executing task...', task], baseDirectory);
|
|
91
90
|
let out = '', message = '';
|
|
92
|
-
const { stdout, stderr } = child_process.spawn(command, (0, types_1.sanitizeArgs)(args), { cwd: baseDirectory, shell: true, stdio: Document.hasLogType(32768) && !broadcastId ? 'inherit' : undefined, signal: instance.signal, uid, gid })
|
|
91
|
+
const { stdout, stderr } = child_process.spawn((0, types_1.sanitizeCmd)(command, (0, types_1.sanitizeArgs)(args)), { cwd: baseDirectory, shell: true, stdio: Document.hasLogType(32768) && !broadcastId ? 'inherit' : undefined, signal: instance.signal, uid, gid })
|
|
93
92
|
.on('exit', code => {
|
|
94
93
|
if (!code) {
|
|
95
|
-
instance.addLog(
|
|
94
|
+
instance.addLog(4, out);
|
|
96
95
|
this.writeTimeProcess(title, 'Success -> ' + task, startTime);
|
|
97
96
|
resolve();
|
|
98
97
|
}
|
|
@@ -104,7 +103,7 @@ async function finalize(instance) {
|
|
|
104
103
|
if (stdout) {
|
|
105
104
|
stdout.setEncoding('utf8').on('data', (value) => {
|
|
106
105
|
if (broadcastId) {
|
|
107
|
-
this.formatMessage(
|
|
106
|
+
this.formatMessage(4, '', value, null, { sessionId: '' });
|
|
108
107
|
}
|
|
109
108
|
out += value;
|
|
110
109
|
});
|
|
@@ -112,7 +111,7 @@ async function finalize(instance) {
|
|
|
112
111
|
if (stderr) {
|
|
113
112
|
stderr.setEncoding('utf8').on('data', (value) => {
|
|
114
113
|
if (broadcastId) {
|
|
115
|
-
this.formatMessage(
|
|
114
|
+
this.formatMessage(2, '', value, null, { sessionId: '' });
|
|
116
115
|
}
|
|
117
116
|
message += value;
|
|
118
117
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-r/android",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"description": "Android document constructor for E-mc.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"homepage": "https://github.com/anpham6/pi-r#readme",
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@e-mc/document": "^0.12.
|
|
24
|
-
"@e-mc/types": "^0.12.
|
|
25
|
-
"dom-serializer": "
|
|
26
|
-
"domhandler": "
|
|
27
|
-
"domutils": "
|
|
23
|
+
"@e-mc/document": "^0.12.5",
|
|
24
|
+
"@e-mc/types": "^0.12.5",
|
|
25
|
+
"dom-serializer": "^2.0.0",
|
|
26
|
+
"domhandler": "^5.0.3",
|
|
27
|
+
"domutils": "^3.2.2",
|
|
28
28
|
"htmlparser2": "^10.0.0",
|
|
29
29
|
"which": "^4.0.0"
|
|
30
30
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
distributionBase=GRADLE_USER_HOME
|
|
2
2
|
distributionPath=wrapper/dists
|
|
3
|
-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.
|
|
3
|
+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
|
4
4
|
zipStoreBase=GRADLE_USER_HOME
|
|
5
5
|
zipStorePath=wrapper/dists
|
|
@@ -3,13 +3,13 @@ plugins {
|
|
|
3
3
|
}
|
|
4
4
|
|
|
5
5
|
android {
|
|
6
|
-
namespace ''
|
|
7
|
-
compileSdk
|
|
6
|
+
namespace = ''
|
|
7
|
+
compileSdk = 36
|
|
8
8
|
|
|
9
9
|
defaultConfig {
|
|
10
10
|
applicationId ''
|
|
11
|
-
minSdk 24
|
|
12
|
-
targetSdk
|
|
11
|
+
minSdk = 24
|
|
12
|
+
targetSdk = 36
|
|
13
13
|
versionCode 1
|
|
14
14
|
versionName '1.0'
|
|
15
15
|
|
|
@@ -19,7 +19,7 @@ android {
|
|
|
19
19
|
release {
|
|
20
20
|
debuggable false
|
|
21
21
|
minifyEnabled true
|
|
22
|
-
shrinkResources false
|
|
22
|
+
shrinkResources = false
|
|
23
23
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -28,7 +28,7 @@ android {
|
|
|
28
28
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
29
29
|
}
|
|
30
30
|
buildFeatures {
|
|
31
|
-
viewBinding false
|
|
31
|
+
viewBinding = false
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
pluginManagement {
|
|
2
|
-
repositories {
|
|
3
|
-
google()
|
|
4
|
-
mavenCentral()
|
|
5
|
-
gradlePluginPortal()
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
dependencyResolutionManagement {
|
|
10
|
-
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
|
11
|
-
repositories {
|
|
12
|
-
google()
|
|
13
|
-
mavenCentral()
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
rootProject.name = '{{projectName}}'
|
|
1
|
+
pluginManagement {
|
|
2
|
+
repositories {
|
|
3
|
+
google()
|
|
4
|
+
mavenCentral()
|
|
5
|
+
gradlePluginPortal()
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
dependencyResolutionManagement {
|
|
10
|
+
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
|
11
|
+
repositories {
|
|
12
|
+
google()
|
|
13
|
+
mavenCentral()
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
rootProject.name = '{{projectName}}'
|
|
18
18
|
include '{{name}}'
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
2
|
+
|
|
1
3
|
plugins {
|
|
2
4
|
alias libs.plugins.android.application
|
|
3
5
|
alias libs.plugins.kotlin.android
|
|
4
6
|
}
|
|
5
7
|
|
|
6
8
|
android {
|
|
7
|
-
namespace ''
|
|
8
|
-
compileSdk
|
|
9
|
+
namespace = ''
|
|
10
|
+
compileSdk = 36
|
|
9
11
|
|
|
10
12
|
defaultConfig {
|
|
11
13
|
applicationId ''
|
|
12
|
-
minSdk 24
|
|
13
|
-
targetSdk
|
|
14
|
+
minSdk = 24
|
|
15
|
+
targetSdk = 36
|
|
14
16
|
versionCode 1
|
|
15
17
|
versionName '1.0'
|
|
16
18
|
|
|
@@ -20,7 +22,7 @@ android {
|
|
|
20
22
|
release {
|
|
21
23
|
debuggable false
|
|
22
24
|
minifyEnabled true
|
|
23
|
-
shrinkResources false
|
|
25
|
+
shrinkResources = false
|
|
24
26
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -28,14 +30,17 @@ android {
|
|
|
28
30
|
sourceCompatibility JavaVersion.VERSION_11
|
|
29
31
|
targetCompatibility JavaVersion.VERSION_11
|
|
30
32
|
}
|
|
31
|
-
kotlinOptions {
|
|
32
|
-
jvmTarget = '11'
|
|
33
|
-
}
|
|
34
33
|
buildFeatures {
|
|
35
|
-
viewBinding true
|
|
34
|
+
viewBinding = true
|
|
35
|
+
}
|
|
36
|
+
lint {
|
|
37
|
+
checkDependencies = false
|
|
36
38
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
kotlin {
|
|
42
|
+
compilerOptions {
|
|
43
|
+
jvmTarget = JvmTarget.fromTarget('11')
|
|
39
44
|
}
|
|
40
45
|
}
|
|
41
46
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
2
|
+
|
|
1
3
|
plugins {
|
|
2
4
|
alias(libs.plugins.android.application)
|
|
3
5
|
alias(libs.plugins.kotlin.android)
|
|
@@ -6,12 +8,12 @@ plugins {
|
|
|
6
8
|
|
|
7
9
|
android {
|
|
8
10
|
namespace = ""
|
|
9
|
-
compileSdk =
|
|
11
|
+
compileSdk = 36
|
|
10
12
|
|
|
11
13
|
defaultConfig {
|
|
12
14
|
applicationId = ""
|
|
13
15
|
minSdk = 24
|
|
14
|
-
targetSdk =
|
|
16
|
+
targetSdk = 36
|
|
15
17
|
versionCode = 1
|
|
16
18
|
versionName = "1.0"
|
|
17
19
|
|
|
@@ -25,14 +27,11 @@ android {
|
|
|
25
27
|
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
|
-
kotlinOptions {
|
|
29
|
-
jvmTarget = "11"
|
|
30
|
-
}
|
|
31
30
|
buildFeatures {
|
|
32
31
|
viewBinding = true
|
|
33
32
|
}
|
|
34
33
|
lint {
|
|
35
|
-
|
|
34
|
+
checkDependencies = false
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
|
|
@@ -41,6 +40,12 @@ java {
|
|
|
41
40
|
targetCompatibility = JavaVersion.VERSION_11
|
|
42
41
|
}
|
|
43
42
|
|
|
43
|
+
kotlin {
|
|
44
|
+
compilerOptions {
|
|
45
|
+
jvmTarget = JvmTarget.fromTarget("11")
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
44
49
|
dependencies {
|
|
45
50
|
implementation(libs.jetbrains.kotlin)
|
|
46
51
|
implementation(libs.androidx.core.ktx)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
[versions]
|
|
2
|
-
agp = "8.
|
|
3
|
-
kotlin = "2.
|
|
2
|
+
agp = "8.12.0"
|
|
3
|
+
kotlin = "2.2.0"
|
|
4
4
|
coreKtx = "1.16.0"
|
|
5
5
|
junit = "4.13.2"
|
|
6
6
|
junitVersion = "1.2.1"
|
|
7
7
|
espressoCore = "3.6.1"
|
|
8
|
-
appcompat = "1.7.
|
|
8
|
+
appcompat = "1.7.1"
|
|
9
9
|
material = "1.12.0"
|
|
10
10
|
constraintlayout = "2.2.1"
|
|
11
11
|
|
package/types/squared.d.ts
CHANGED
|
@@ -75,10 +75,10 @@ export interface ManifestData extends PlainObject {
|
|
|
75
75
|
minHeight?: string;
|
|
76
76
|
gravity?: string;
|
|
77
77
|
};
|
|
78
|
-
}>;
|
|
78
|
+
} & PlainObject>;
|
|
79
79
|
activityName?: string;
|
|
80
80
|
fontProvider?: string;
|
|
81
|
-
};
|
|
81
|
+
} & PlainObject;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
export interface ControllerSettingsDirectoryUI {
|