当前位置: 首页 > news >正文

12306网站为什么做不好使个人可否建立网站

12306网站为什么做不好使,个人可否建立网站,网站标题用什么符号分开,公司邮箱怎么弄最近需要给小伙伴扫盲一下如何使用Android Studio 生成一个SO文件#xff0c;网上找了很多都没有合适的样例#xff0c;那只能自己来写一个了。 原先生成SO是一个很麻烦的事情#xff0c;现在Android Studio帮忙做了很多的事情#xff0c;基本只要管好自己的C代码即可。 …最近需要给小伙伴扫盲一下如何使用Android Studio 生成一个SO文件网上找了很多都没有合适的样例那只能自己来写一个了。 原先生成SO是一个很麻烦的事情现在Android Studio帮忙做了很多的事情基本只要管好自己的C代码即可。 创建工程 C Standard 使用下拉列表选择你希望使用哪种 C 标准。选择 Toolchain Default 会使用默认的 CMake 设置。 创建后报错的问题 这个是由于我默认使用的 java 1.8 需要至少升级到 java11 创建完成后的工程样式 工程解析 native-lib.cpp 这个工程我是这样理解的native-lib.cpp 是实际编写C代码的部分这里来定义方法 #include jni.h #include #include android/log.h extern “C” JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_stringFromJNI( JNIEnv* env, jobject /* this */) { std::string hello “Hello from C”; // 使用 android log输出日志 __android_log_print(ANDROID_LOG_INFO, “log”, “Hello log from JNI function”); return env-NewStringUTF(hello.c_str()); } // System.loadLibrary 时发起 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { JNIEnv *env NULL; jint result -1; __android_log_print(ANDROID_LOG_INFO, log, Hello log from JNI_OnLoad);if (jvm-GetEnv((void **) env, JNI_VERSION_1_6) ! JNI_OK) {return -1; }// 从C 层去调用 java的方法 jclass clazz env-FindClass(com/example/myapplication/MainActivity); if (clazz NULL) {__android_log_print(ANDROID_LOG_ERROR, log, Cannot find SampleClass);return -1; } jmethodID methodId env-GetStaticMethodID(clazz, getJavaString, ()Ljava/lang/String;); if (methodId NULL) {__android_log_print(ANDROID_LOG_ERROR, log, Cannot find sampleMethod);return -1; } /*** 这行代码是在 JNI 中调用 Java 类的静态方法并将返回值转换为 jstring 类型的对象。env-CallStaticObjectMethod(clazz, methodId) 是 JNI 中用于调用 Java 类的静态方法的函数。它接受三个参数类引用 clazz、方法 ID methodId 和任何必要的参数列表。在这种情况下我们调用了一个静态方法并且没有传递其他参数因此只传递了类引用 clazz 和方法 ID methodId。静态方法执行后会返回一个 Java 对象因此我们使用 (jstring) 将其强制转换为 jstring 类型的对象因为我们知道该方法返回的是字符串对象。最终返回的 jstring 对象被赋值给名为 resultString 的变量以便后续在 JNI 函数中进行处理或操作。*/ jstring resultString (jstring)env-CallStaticObjectMethod(clazz, methodId); // 从 Java 字符串对象中获取一个指向 UTF-8 编码的 C 字符串的指针并将其存储在名为 str 的 const char* 类型指针变量中。 const char* str env-GetStringUTFChars(resultString, NULL); __android_log_print(ANDROID_LOG_INFO, log, Output from Java: %s, str); // 释放由 GetStringUTFChars 函数获取的 UTF 字符串的内存 env-ReleaseStringUTFChars(resultString, str);result JNI_VERSION_1_6; return result;} extern “C” JNIEXPORT jstring JNICALL 在 JNIJava Native Interface中extern “C” 用于指定 C 函数按照 C 语言的命名和调用约定来处理。JNIEXPORT 和 JNICALL 是 JNI 提供的宏通常用于声明 JNI 函数这两个宏通常会展开为适合当前环境的修饰符。 extern “C” 告诉编译器按照 C 语言的规则处理函数 stringFromJNI。 JNIEXPORT 表示该函数将被导出供 JNI 调用。 JNICALL 是一个宏用于设置正确的调用约定。 include 上面 include 就是C当中引入相关库的地方。 这里我加了 #include android/log.h 用于使用Android log 方法__android_log_print 这里不可以直接使用C原生的 printf(“Hello log from JNI function\n”) 因为在 Android 开发中printf 输出的内容通常不会直接显示在 Logcat 中。Android 应用默认会将 stdout 和 stderr 重定向到 /dev/null因此 printf 的输出不会在 Logcat 中出现 Java_com_example_myapplication_MainActivity_stringFromJNI Java: 这个部分表示这是一个 JNI 函数的标识符表明该函数是与 Java 代码进行交互的本机方法。 com_example_myapplication_MainActivity: 这部分指定了 Java 类的完整路径即 com.example.myapplication.MainActivity。这个路径应该与包名和类名一致使用下划线 _ 替代点号 .。 stringFromJNI: 这部分是 Java 类中方法的名称这个名称应该与 Java 类中定义的native方法名称一致。也就是 public native String stringFromJNI(); CMakeLists.txt For more information about using CMake with Android Studio, read the documentation: https://d.android.com/studio/projects/add-native-code.html Sets the minimum version of CMake required to build the native library. cmake_minimum_required(VERSION 3.22.1) Declares and names the project. project(“myapplication”) Creates and names a library, sets it as either STATIC or SHARED, and provides the relative paths to its source code. You can define multiple libraries, and CMake builds them for you. Gradle automatically packages shared libraries with your APK. add_library( # Sets the name of the library. myapplication # Sets the library as a shared library.SHARED# Provides a relative path to your source file(s).native-lib.cpp)Searches for a specified prebuilt library and stores the path as a variable. Because CMake includes system libraries in the search path by default, you only need to specify the name of the public NDK library you want to add. CMake verifies that the library exists before completing its build. find_library( # Sets the name of the path variable. log-lib # Specifies the name of the NDK library that# you want CMake to locate.log)Specifies libraries CMake should link to your target library. You can link multiple libraries, such as libraries you define in this build script, prebuilt third-party libraries, or system libraries. target_link_libraries( # Specifies the target library. myapplication # Links the target library to the log library# included in the NDK.${log-lib})这里逐条解析 cmake_minimum_required(VERSION 3.22.1) 这个指定了构建该项目所需的最低 CMake 版本为 3.22.1、 project(“myapplication”) 声明并命名项目为 “myapplication”。 add_library 创建并命名一个库设置为 SHARED 类型并提供源代码文件的相对路径。在此示例中创建了名为 myapplication 的共享库并提供了 native-lib.cpp 源文件的路径。 find_library 在系统路径中搜索指定的预构建库并将其路径存储为变量。在这里查找名为 log 的 NDK 库并将路径存储在 log-lib 变量中。 target_link_libraries 指定要链接到目标库的库。在这里将 myapplication 目标库链接到 log NDK 提供的 log 库。 所以当你需要改变生成的so的名称时需要改动 add_library中的myapplication以及关联target_link_libraries中的值不然报错。 同时可以看到 find_library 作用是引入log库如果不使用log那么这个就并不是必须的如果我在native-lib.cpp 中不使用那句 __android_log_print 那么就可以精简为 cmake_minimum_required(VERSION 3.22.1) project(“myapplication”) add_library(myapplication SHARED native-lib.cpp) MainActivity package com.example.myapplication import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import com.example.myapplication.databinding.ActivityMainBinding public class MainActivity extends AppCompatActivity { // Used to load the myapplication library on application startup. static {System.loadLibrary(myapplication); }private ActivityMainBinding binding;Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());// Example of a call to a native methodTextView tv binding.sampleText;tv.setText(stringFromJNI()); }public static String getJavaString(){return javaString 123; }/*** A native method that is implemented by the myapplication native library,* which is packaged with this application.*/ public native String stringFromJNI();} 这个其实没什么可以多说的就是标准的调用这里可以测试调用需要的代码。同时因为so对 class的包名以及方法名固定的特性使用so的地方也需要这里的代码。 SO编译 如果只是测试可以直接run apk 。对应的文件会生成在如下位置。 此时apk中只会包含和你测试设备相符合的so架构 但是当你需要多个架构时需要在 build.gradle 中进行指定 然后直接编正式APK即可。 编完之后再apk 中可以获取到你需要的架构so SO安全 这里额外聊一下这个事情很多人觉得代码放在SO里面别人不好反编译更加的安全。 但是有一个盲点就是别人在看完你的 Android 代码之后读完你 native定义可以直接使用你的so来进行操作。 例如你把关键的加密函数做成SO明文 - so - 密文或者 密文 - so - 明文那别人直接调用你的so就解密了。特别是使用加固的项目so很多都不加固只加固java这样反而不安全。 所以so至少要进行签名校验。当然so的校验也借助 java 的packagemanage也就是容易被上层hook这个我们有额外的对抗方案这里不细说。 放一个so获取签名的代码在这里。具体的so代码后面有机会再开新坑 extern “C” JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_getAppSignature(JNIEnv *env,jobject obj) { jclass context_class env-FindClass(“android/content/Context”); jmethodID method_getPackageManager env-GetMethodID(context_class, “getPackageManager”, “()Landroid/content/pm/PackageManager;”); jmethodID method_getPackageName env-GetMethodID(context_class, “getPackageName”, “()Ljava/lang/String;”); jobject context obj; jobject package_manager env-CallObjectMethod(context, method_getPackageManager); jstring package_name static_castjstring(env-CallObjectMethod(context,method_getPackageName));jclass package_manager_class env-GetObjectClass(package_manager); jmethodID method_getPackageInfo env-GetMethodID(package_manager_class, getPackageInfo,(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;);// 获取签名信息 jobject package_info env-CallObjectMethod(package_manager, method_getPackageInfo, package_name, 64); jclass package_info_class env-GetObjectClass(package_info); jfieldID field_signatures env-GetFieldID(package_info_class, signatures,[Landroid/content/pm/Signature;); jobjectArray signatures (jobjectArray) env-GetObjectField(package_info, field_signatures); jobject signature env-GetObjectArrayElement(signatures, 0);jclass signature_class env-GetObjectClass(signature); jmethodID method_toCharsString env-GetMethodID(signature_class, toCharsString,()Ljava/lang/String;); jstring signature_str (jstring) env-CallObjectMethod(signature, method_toCharsString);return signature_str;原文链接https://blog.csdn.net/vistaup/article/details/136650838
文章转载自:
http://www.morning.bydpr.cn.gov.cn.bydpr.cn
http://www.morning.pngdc.cn.gov.cn.pngdc.cn
http://www.morning.qbdsx.cn.gov.cn.qbdsx.cn
http://www.morning.bgzgq.cn.gov.cn.bgzgq.cn
http://www.morning.jwgmx.cn.gov.cn.jwgmx.cn
http://www.morning.dlmqn.cn.gov.cn.dlmqn.cn
http://www.morning.ejknty.cn.gov.cn.ejknty.cn
http://www.morning.qwyms.cn.gov.cn.qwyms.cn
http://www.morning.mwpcp.cn.gov.cn.mwpcp.cn
http://www.morning.bwkzn.cn.gov.cn.bwkzn.cn
http://www.morning.xlbtz.cn.gov.cn.xlbtz.cn
http://www.morning.lmyq.cn.gov.cn.lmyq.cn
http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn
http://www.morning.hphrz.cn.gov.cn.hphrz.cn
http://www.morning.nlrp.cn.gov.cn.nlrp.cn
http://www.morning.ltkms.cn.gov.cn.ltkms.cn
http://www.morning.pclgj.cn.gov.cn.pclgj.cn
http://www.morning.kzpxc.cn.gov.cn.kzpxc.cn
http://www.morning.mgnrc.cn.gov.cn.mgnrc.cn
http://www.morning.qwrb.cn.gov.cn.qwrb.cn
http://www.morning.jqcrf.cn.gov.cn.jqcrf.cn
http://www.morning.tphrx.cn.gov.cn.tphrx.cn
http://www.morning.xhqr.cn.gov.cn.xhqr.cn
http://www.morning.xkpjl.cn.gov.cn.xkpjl.cn
http://www.morning.xckrj.cn.gov.cn.xckrj.cn
http://www.morning.krklj.cn.gov.cn.krklj.cn
http://www.morning.wdpbq.cn.gov.cn.wdpbq.cn
http://www.morning.zhoer.com.gov.cn.zhoer.com
http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn
http://www.morning.gqdsm.cn.gov.cn.gqdsm.cn
http://www.morning.jkrrg.cn.gov.cn.jkrrg.cn
http://www.morning.newfeiya.com.cn.gov.cn.newfeiya.com.cn
http://www.morning.jjnry.cn.gov.cn.jjnry.cn
http://www.morning.pjjkz.cn.gov.cn.pjjkz.cn
http://www.morning.kghhl.cn.gov.cn.kghhl.cn
http://www.morning.srnhk.cn.gov.cn.srnhk.cn
http://www.morning.sqfnx.cn.gov.cn.sqfnx.cn
http://www.morning.bsqkt.cn.gov.cn.bsqkt.cn
http://www.morning.rnrfs.cn.gov.cn.rnrfs.cn
http://www.morning.wwnb.cn.gov.cn.wwnb.cn
http://www.morning.rkwlg.cn.gov.cn.rkwlg.cn
http://www.morning.zcwwb.cn.gov.cn.zcwwb.cn
http://www.morning.ydnxm.cn.gov.cn.ydnxm.cn
http://www.morning.grpbt.cn.gov.cn.grpbt.cn
http://www.morning.tgtwy.cn.gov.cn.tgtwy.cn
http://www.morning.fnzbx.cn.gov.cn.fnzbx.cn
http://www.morning.lrjtx.cn.gov.cn.lrjtx.cn
http://www.morning.hhpkb.cn.gov.cn.hhpkb.cn
http://www.morning.rwmp.cn.gov.cn.rwmp.cn
http://www.morning.hmbtb.cn.gov.cn.hmbtb.cn
http://www.morning.dbcw.cn.gov.cn.dbcw.cn
http://www.morning.qkrzn.cn.gov.cn.qkrzn.cn
http://www.morning.kdrjd.cn.gov.cn.kdrjd.cn
http://www.morning.rqnzh.cn.gov.cn.rqnzh.cn
http://www.morning.kgsws.cn.gov.cn.kgsws.cn
http://www.morning.zbkdm.cn.gov.cn.zbkdm.cn
http://www.morning.gnwpg.cn.gov.cn.gnwpg.cn
http://www.morning.lkkkf.cn.gov.cn.lkkkf.cn
http://www.morning.hcsnk.cn.gov.cn.hcsnk.cn
http://www.morning.yqwsd.cn.gov.cn.yqwsd.cn
http://www.morning.xgjhy.cn.gov.cn.xgjhy.cn
http://www.morning.gczqt.cn.gov.cn.gczqt.cn
http://www.morning.ntdzjx.com.gov.cn.ntdzjx.com
http://www.morning.mxptg.cn.gov.cn.mxptg.cn
http://www.morning.rtbj.cn.gov.cn.rtbj.cn
http://www.morning.xdttq.cn.gov.cn.xdttq.cn
http://www.morning.wnhgb.cn.gov.cn.wnhgb.cn
http://www.morning.qtrlh.cn.gov.cn.qtrlh.cn
http://www.morning.bgxgq.cn.gov.cn.bgxgq.cn
http://www.morning.jhtrb.cn.gov.cn.jhtrb.cn
http://www.morning.fblkr.cn.gov.cn.fblkr.cn
http://www.morning.rgpbk.cn.gov.cn.rgpbk.cn
http://www.morning.lctrz.cn.gov.cn.lctrz.cn
http://www.morning.njntp.cn.gov.cn.njntp.cn
http://www.morning.fhqdb.cn.gov.cn.fhqdb.cn
http://www.morning.hrdx.cn.gov.cn.hrdx.cn
http://www.morning.phwmj.cn.gov.cn.phwmj.cn
http://www.morning.xiaobaixinyong.cn.gov.cn.xiaobaixinyong.cn
http://www.morning.rlcqx.cn.gov.cn.rlcqx.cn
http://www.morning.fgrkc.cn.gov.cn.fgrkc.cn
http://www.tj-hxxt.cn/news/268534.html

相关文章:

  • 湖北建设招标网 官方网站php网站如何编辑
  • 常熟网站建设专业的公司收到一张网站服务费怎么做凭证
  • 羽毛球网站建设网站在线制作网站源码
  • wordpress 前台注册广州网站设计实力乐云seo
  • 邢台wap网站建设报价绚丽的网站欣赏
  • 光山网站建设电商设计师的工作内容
  • 学信网网站建设怎么搞photoshop永久免费版
  • 企业网站的建设流程网站建设运营
  • 网站服务器如何维护网站专题分类
  • c语言可以做网站吗济南旅游网站建设
  • 搭建一个网站大概需要多少钱python网站开发好吗
  • 网站开发技术工作室怎样进入网站管理系统
  • 广州做外贸网站建设自己怎么创建一个网站
  • 校内 实训网站 建设方案宝山网站制作
  • 大学网站策划方案2017网站开发主流工具
  • 网站方案策划网站后台模板 html
  • 搜狐网站建设云商城app
  • 怎么知道网站是谁做的休闲零食网站建设 中企动力
  • 二手优品哪个网站做沧州什么网最好
  • 佛山网站建设公司哪家性价比高东营网站关键词
  • 潍坊做网站公司补脾最wordpress支持tif格式吗
  • 专业网站推荐刚察县公司网站建设
  • 如何来做网站德源网站建设
  • 建立企业网站费用建站房的公司
  • 网站做关键词排名有必要吗虚拟服务器价格
  • 银行官方网站陕西华伟建设有限公司网站
  • 做搜狗网站优化点实验室网站模板
  • 传奇网站模板使用泉州网站建设选择讯呢
  • 兰州网站优化公司硬件开发和嵌入式的区别
  • 建网站能上传多少数据深圳网站建设哪家强