Complemento de compresión de imágenes uniapp: cómo descifrar aplicaciones escritas por uniapp
Problema: la visualización de la imagen debe tener menos de 20 kb, lo que se debe a que la imagen es demasiado grande, así que simplemente comprime la imagen
Sitio web de referencia: Cómo descifrar la aplicación uniapp
Recientemente, el proyecto de aplicación móvil desarrollado por uniapp encontró un problema difícil. Quiero implementar TCPScoket. Sabemos que el desarrollo de Uniapp básicamente utiliza algunos marcos front-end (como vue, mpvue, etc.) y algunas API propias de uni. Hay tres formas comunes de usar código nativo de Android en uniapp:
Una: use () para llamar a clases de Android para escribir código nativo, pero los resultados de la prueba no son ideales y la velocidad es muy lenta.
Dos: desarrollar complementos nativos de Android, que se ejecutan rápidamente, pero requieren cierta experiencia en desarrollo de Android y son más difíciles.
Tres: compre complementos nativos desarrollados por otros desarrolladores, pero los precios generalmente no son bajos.
En resumen, ¡debemos aprender a desarrollar complementos nativos nosotros mismos!
2. Preparación
1. Herramienta de desarrollo de AndroidStudio. Dirección de descarga:
Tutorial de instalación:
2. Descarga del SDK sin conexión (descarga la última versión). Dirección de descarga:
3. Asegúrese de que HbuilderX también sea la última versión.
4.
Método de generación:
3. Crear caso Uniapp (TCP-Plugin)
1. Cree una aplicación en el centro de desarrolladores:
2. para ingresar a la aplicación, seleccione Administración de claves de empaquetado fuera de línea e ingrese la siguiente información:
Obtener certificado de firma:
3. Haga clic en Guardar para generar la clave de aplicación para su uso posterior:
<. p>Inicie HbuilderX, inicie sesión en su cuenta en la esquina inferior izquierda, cree un nuevo proyecto de plantilla predeterminado con el mismo nombre que el proyecto anterior y verifique si el AppID corresponde al APPID de la nube:El ¡Ya se ha creado el uniappdemo anterior!
4. Desarrollo de complementos nativos de Android
1. Importe el SDK sin conexión descargado, UniPlugin-Hello-AS, al proyecto del marco de desarrollo de complementos nativos.
2. Cambie al modo de proyecto, la estructura del proyecto es la siguiente:
3. Complete la clave de aplicación que acabamos de solicitar en app/src/main/. la clave de aplicación como Android:
Cuatro. Coloque nuestro certificado de firma en el directorio de la aplicación y asigne un nombre al certificado de firma del blogger.
Cinco. Configure el certificado de firma, la opción signingConfigs en app/:
Seis, haga clic derecho en UniPlugin-Hello-AS, crear módulo
Siete, complete la información del módulo de complemento:
Configurar TCP. -Socket/, copia el caso oficial uniplugin_module/
applyplugin:''
android{
compileSdkVersion29
defaultConfig{
minSdkVersion16
targetSdkVersion28
versionCode1
versionName" 1.0"
testInstrumentationRunner''
}
buildTypes{
lanzamiento{
minifyEnabledfalse
prouardFilesgetDefaultProguardFile(''),'
} p>
}
}
repositorios{
planoDir{
dirs'libs'
}
}
dependencias{
compileOnlyfileTree(dir:libs',include:['*.jar'])
compileOnlyfileTree (dir:'./appcompat:1.0.0'
p>implementación':fastjson:1.1.'
implementación':fresco:1.13.0'
/*implementation':appcompat-v7. 28.0.0'
testImplementation'junit:junit:4.12'
androidTestImplementation':runner:1.0.2'
androidTestImplementation'. :espresso-core:3.0.2'* /
}
9. Eliminar casos oficiales innecesarios para que el proyecto sea más conciso (opcional): p>
10. En el módulo TCP-Socket, cree la clase TcpModule en com/example/tcp/socket
x.
importo;
importo;
importo;
importo;
importo;
publicclassTcpModuleextendsUniModule{ p>
intport=6666;
Socketsocket=null;
OutputStreamWriteroutputStream=null;
InputStreamReaderinputStream=null;
@ UniJSMethod
publicvoidsend(finalJSONObjectjson,finalUniJSCallbackcallback){
newThread(newRunnable(){
@Override
publicvoidrun(){
Stringip=("ip");
StringuserId=("code");
JSONObjectres=newJSONObject();
Establecer una conexión con el servidor
try{
socket=newSocket(ip,port);
(1500);
// Obtener información después de establecer la conexión y flujo de salida
outputStream=newOutputStreamWriter(());
inputStream=newInputStreamReader(());
}catch(Exceptione){
intenta{
();
}catch(IOExceptionioException){
( );
}
e.printStackTrace();
("code",400);
("data", "Excepción del sistema, ¡reinicie la APLICACIÓN!"); p> p>
(res);
}
BufferedReadersocketReader=newBufferedReader((inputStream));
BufferedWriterbufferedWriter=newBufferedWriter(outputStream);
PrintWritersocketWriter=newPrintWriter(bufferedWriter,true);
(userId);
prueba{
Strings=();
("code",200);
("data",s);
/Cierre la conexión aquí; de lo contrario, el programa no podrá ejecutarse después la devolución de llamada, ni podrá cerrar la conexión finalmente
();
(res);
}catch(IOExceptione){ p>
("code", 400);
("data", "Anormalidad del sistema, reinicie la APLICACIÓN. ");
(res);
}
}
}
}).start( );
}
}
Nota: Android 4.0 no permite que el hilo principal realice conexiones de red; de lo contrario, se producirán conexiones de red. Las conexiones de red inician un hilo separado.
12. Para registrar el complemento, escríbalo en el archivo app/src/main/assets/dcloud_, como se muestra a continuación:
{
"nativePlugins":[
{
"plugins":[
{
"tipo": "módulo", p>
"nombre":"TCP-Socket",
"clase":""
}
]
}
]
}
5. HbuilderX genera un complemento TCP empaquetado localmente
1. el complemento nativo es el siguiente:
constTCP=("TCP-Socket");
El código está escrito de la siguiente manera:
& lt;imageclass="logo" src="/static/">
<textclass="title">{{title}}& lt;/text>
constTCP=("TCP-Socket");
exportdefault{
data() {
return{
título:Prueba del complemento TCP-Socket'
}
} ,
onLoad(){
},
métodos:{
clickBtn(){
( {
ip :'192.168.0.100',//ip del servidor
código:'d92863370904331f8a19cc116719bcd1'//datos a enviar
} ,e=>{
/ /función de devolución de llamada
({
título:'Datos de respuesta:'+(e),
icono:' ninguno'
});
})
}
}
}
}
(.Configure el appid en el directorio app/src/main/assets/data/dcloud_ del proyecto UniPlugin-Hello-AS:
3. Haga referencia al complemento TCP-Socket:
4. haga clic en Ejecutar para probar:
7. Empaquetar y generar el complemento aar nativo
8. HbuilderX presenta el complemento aar de empaquetado TCP-Socket:
1. La estructura del directorio y el método de escritura son los siguientes:
2. Seleccione el complemento local:
9.
p>
El método exitoso para empaquetar una base personalizada es el siguiente:
10. Complemento de prueba de depuración real HbuilderX
1. Seleccione una base de depuración personalizada:
p>Nota: Seleccione esta opción si ha creado una base de depuración personalizada pero no la está ejecutando. ¡Vuelva a empaquetar su base de depuración personalizada hasta que aparezca la opción para ejecutar la base de depuración!
2. Elija ejecutar la estación de acoplamiento de AndroidApp para la depuración real del dispositivo:
¡Prueba exitosa!
¡Los paquetes de depuración y desarrollo de complementos nativos están completos!
3. Problemas encontrados durante el proceso de desarrollo:
1. [JSFramework] La capa inferior en ejecución actual no contiene complementos nativos [xxxx]. en la lista de complementos de configuración. La capa de ejecución subyacente de complementos nativos.
Análisis del problema:
1. Error de escritura de configuración (comprobar con atención).
2. Si la configuración está en el manifiesto (esta operación inteligente generalmente no se envía)
3. Si el complemento nativo utiliza una base personalizada (principalmente debido a esto).
4. Si hay un error en el complemento nativo desarrollado por usted mismo y si la base se empaquetó correctamente (la razón es que esta probabilidad es muy pequeña porque Android Studio está fuera de línea) Al empaquetar. , depuramos y aprobamos, lo que indica que el complemento no cuestionó).
2. Problema de Android Studio: la lista de tareas de Gradle no creada durante la lista de tareas puede afectar el rendimiento de sincronización de Gradle en proyectos grandes. Complemento uniapp de desarrollo de Android, contexto
En el desarrollo de Android, el contexto es un concepto muy importante. Representa el estado actual y la información de una aplicación o componente de Android. Al desarrollar complementos de Uniapp, puede utilizar Context para acceder a los recursos de la aplicación, como cadenas, diseños, imágenes, etc.
En el desarrollo del complemento Uniapp, puedes obtener Contexto de las siguientes maneras:
1 En la actividad o servicio a obtener: Si tu complemento necesita ser ejecutado. en la operación de Actividad o Servicio, puede usar el método getContext () para obtener el contexto actual.
2. Ingrese a la aplicación: si su complemento necesita realizar operaciones a nivel de aplicación, puede usar el método getApplicationContext() para obtener el contexto actual.
3. Obtener a partir de parámetros entrantes: en algunos casos, es posible que necesite ingresar el contexto desde afuera, como al crear un cuadro de diálogo. En este caso, puede obtener el contexto de los parámetros entrantes.
Tenga en cuenta que al utilizar Context debe evitar pérdidas de memoria y punteros nulos. Por ejemplo, al crear un cuadro de diálogo, debe utilizar el contexto de la actividad en lugar del contexto de la aplicación; de lo contrario, puede provocar una pérdida de memoria. Al mismo tiempo, también debe prestar atención a liberar el contexto a tiempo para evitar excepciones de puntero nulo.